zoukankan      html  css  js  c++  java
  • 993. Cousins in Binary Tree

    /**
     * 993. Cousins in Binary Tree
     * https://leetcode.com/problems/cousins-in-binary-tree/description/
     * two nodes in the binary tree are the cousins if they have same depth,but have different parents.
     */
    
    import java.util.*
    
    class TreeNode(var `val`: Int) {
        var left: TreeNode? = null
        var right: TreeNode? = null
    }
    
    class Solution {
        fun isCousins(root: TreeNode?, x: Int, y: Int): Boolean? {
            //if have same depth and is not sibling, they are cousins
            return getDepth(root, x) == getDepth(root, y) && !isSibling(root, x, y)
        }
    
        fun getDepth(root: TreeNode?, value: Int): Int {
            val queue = LinkedList<TreeNode>()
            var depth = 0
            queue.offer(root)
            while (queue.size > 0) {
                depth++
                val size = queue.size
                for (i in size - 1 downTo 0) {
                    val node = queue.poll()
                    if (node.`val` == value) {
                        return depth
                    }
                    if (node.left != null) {
                        queue.offer(node.left)
                    }
                    if (node.right != null) {
                        queue.offer(node.right)
                    }
                }
            }
            return -1
        }
    
        /**
         * 判断x和y在root中是否为兄弟
         * */
        fun isSibling(root: TreeNode?, x: Int, y: Int): Boolean {
            val queue = LinkedList<TreeNode>()
            var depth = 0
            queue.offer(root)
            while (queue.size > 0) {
                depth++
                val size = queue.size
                for (i in size - 1 downTo 0) {
                    val node = queue.poll()
                    if (node.left != null && node.right != null) {
                        if (node.left!!.`val` == x && node.right!!.`val` == y ||
                            node.right!!.`val` == x && node.left!!.`val` == y
                        ) {
                            return true
                        }
                    }
                    if (node.left != null) {
                        queue.offer(node.left)
                    }
                    if (node.right != null) {
                        queue.offer(node.right)
                    }
                }
            }
            return false
        }
    }
  • 相关阅读:
    MySQL中 INSERT INTO 和 SELECT 的组合使用
    Chrome浏览器如何强制刷新
    html中点击a链接不跳转
    PHP strstr() 和 strrchr() 详解
    Mac 在当前目录打开终端
    PHP 函数相关
    ARM、DSP、FPGA的技术特点和区别
    ARM版本系列及家族成员梳理
    【重磅推荐】嵌入式Linux经典书单(部分含视频)
    Makefile的引入及规则
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/11013715.html
Copyright © 2011-2022 走看看