首页 > 其他 > 详细

Leetcod-993-二叉树的堂兄弟节点

时间:2021-05-17 13:47:07      阅读:17      评论:0      收藏:0      [点我收藏+]

Leetcod-993-二叉树的堂兄弟节点

描述

技术分享图片

注意:亲兄弟不符合条件!!

思路

  1. 所谓堂兄弟,就是指在同一层的两个非亲兄弟节点
  2. 采用层次遍历,维护两个变量 flagx 和 flagy
  3. 在同一层中若出现了 x 或 y,则把对应的值设置为true
  4. 若在同一层中 x 与 y 没有都出现,就都设置为false
  5. 最后根据 flagx && flagy 判断是否为堂兄弟

代码

class Solution {
    public boolean isCousins(TreeNode root, int x, int y) {
        // 创建队列
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        if(root == null) return false;
        boolean flagx = false;
        boolean flagy = false;
        queue.add(root);
        // 层次遍历
        while(!queue.isEmpty()){
            int size = queue.size();
            for(int i = 0; i < size; i++){
                TreeNode node = queue.poll();
                
                // 排除两个节点为亲兄弟的情况
                if(node.left != null && node.right != null){
                    if((node.left.val == x && node.right.val == y) || (node.left.val == y && node.right.val == x)){
                        continue;
                    }
                    
                }
                
                if(node.val == x) flagx = true;
                if(node.val == y) flagy = true;

                if(node.left != null){
                    queue.offer(node.left);
                }
                if(node.right != null){
                    queue.offer(node.right);
                }
            }
            if(flagx && flagy){
                return true;
            }else{
                flagx = false;
                flagy = false;
            }
        }
        return false;
    }
}

Leetcod-993-二叉树的堂兄弟节点

原文:https://www.cnblogs.com/caoshikui/p/14776151.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!