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
        }
    }
  • 相关阅读:
    常用函数集锦
    HDU1212加深下对取模运算的理解
    HDU1022 queue和vector模拟
    设计模式原则
    3.6html学习笔记之样式选择
    poj 1274(二分图最大匹配)
    poj 1469(二分图最大匹配)
    poj 3692(二分图匹配--最大独立集)
    Codeforces Round #230 (Div. 1) 解题报告
    Codeforces Rockethon 2014 解题报告
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/11013715.html
Copyright © 2011-2022 走看看