zoukankan      html  css  js  c++  java
  • 二叉树的堂兄弟节点

    此博客链接:

    二叉树的堂兄弟节点

    题目链接: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;
        }
    }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
    出来混总是要还的
  • 相关阅读:
    Kafk为什么这么快
    kafka消息格式演变
    kafka基础命令及api使用
    zookeeper && kafka && kafka manager开机自启动设置
    sqoop进行将Hive 词频统计的结果数据传输到Mysql中
    hive实例的使用
    使用HBase Shell命令
    Hadoop使用实例 词频统计和气象分析
    HDFS 操作命令
    第四次作业 描述HDFS体系结构、工作原理与流程
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/13610832.html
Copyright © 2011-2022 走看看