二叉樹的堂兄弟節點


此博客鏈接:

二叉樹的堂兄弟節點

題目鏈接:https://leetcode-cn.com/problems/cousins-in-binary-tree/

在二叉樹中,根節點位於深度 0 處,每個深度為 k 的節點的子節點位於深度 k+1 處。

如果二叉樹的兩個節點深度相同,但父節點不同,則它們是一對堂兄弟節點。

我們給出了具有唯一值的二叉樹的根節點 root,以及樹中兩個不同節點的值 x 和 y。

只有與值 x 和 y 對應的節點是堂兄弟節點時,才返回 true。否則,返回 false。

 

示例 1:

 

 


輸入:root = [1,2,3,4], x = 4, y = 3
輸出:false
示例 2:

 

 


輸入:root = [1,2,3,null,4,null,5], x = 5, y = 4
輸出:true
示例 3:

 

 

 

輸入:root = [1,2,3,null,4], x = 2, y = 3
輸出:false

題解:

        思路:

                1.層次遍歷,把根節點的左右孩子存入到隊列中,然后從隊列中取出節點,判斷給定的x,y有沒有在第二層在,只要有一個在第二層上,就返回false。

                2.如果給的節點不在第二層,且在同一層上,並且節點不是同一個父親,則返回true。

      方法:層次遍歷,判斷每個節點的左右孩子節點是否是給的x,y,如果不是,把一層的節點存到一個列表中,然后判斷x,y是否在這一層中,如果在一層中,只包含一個x或者y,則返回false。

     說明:

            我是采取把不合法的情況排除,那剩下的局勢合法的,首先同一個父親的節點的兩個數據排除,其次不在同一層的數據排除。剩下的全是合法的數據。

代碼:

class Solution {
    public boolean isCousins(TreeNode root, int x, int y) {
        Queue<TreeNode> queue=new LinkedList();
        if(root.left!=null&&root.right!=null)
        if(root.left.val==x||root.left.val==y||root.right.val==x||root.right.val==y)
        return false;
        if(root.left==null||root.right==null)
        return false;
        queue.add(root);
        //queue.add(root.right);
        while(!queue.isEmpty())
        {
            int len=queue.size();
            List<Integer> list=new LinkedList();
            for(int i=0;i<len;i++)
            {
                TreeNode temp=queue.poll();
                list.add(temp.val);
                if(temp.left!=null&&temp.right!=null)
                if((temp.left.val==x&&temp.right.val==y)||(temp.left.val==y&&temp.right.val==x))
                {
                    return false;
                }
                if(temp.left!=null)
                {
                    queue.add(temp.left);
                }
                 if(temp.right!=null)
                {
                    queue.add(temp.right);
                }
            
            }
            if(list.contains(x))
            {
                if(!list.contains(y))
                return false;
            }
        }
        return true;
    }
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM