二叉树的堂兄弟节点

此博客链接:

二叉树的堂兄弟节点

题目链接: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;
    }
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
出来混总是要还的
原文地址:https://www.cnblogs.com/ping2yingshi/p/13610832.html