题解 | #二叉树的下一个结点#

二叉树的下一个结点

https://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e

kotlin
/**
 * class TreeLinkNode(var `val`: Int) {
 *     var left: TreeLinkNode? = null
 *     var right: TreeLinkNode? = null
 *     var next: TreeLinkNode? = null
 * }
 */
object Solution {
    /**
    * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
    *
    * 
        * @param pNode TreeLinkNode类 
        * @return TreeLinkNode类
    */
    fun GetNext(pNode: TreeLinkNode?): TreeLinkNode?  {
        if (pNode == null) return pNode
        if (pNode!!.right == null) {
            var father = pNode!!.next
                        //如果目标节点右子树为空,获取父节点,如果目标节点刚好是父节点的左子树那么按照中序遍历下一个遍历的刚好是父节点
            if (father != null && father.left == pNode) return father
                        //递归寻找一个目标节点在该节点的左子树的节点
            var grand = father?.next
            while (grand != null && grand.left != father) {
                father = grand
                grand = grand?.next
            }
            return  grand
        }
                //右子树不为空,则下一个节点就是右子树的最左的节点
        return getLeft(pNode!!.right!!)
    }
    
    private fun getLeft(root: TreeLinkNode): TreeLinkNode {
        if (root.left == null) return root
        return getLeft(root.left!!)
    }
}            


全部评论

相关推荐

点赞 评论 收藏
分享
白火同学:能。我当初应届沟通了1200,收简历50,面试10左右吧,加油投吧
投了多少份简历才上岸
点赞 评论 收藏
分享
缒梦&独舞:这家公司是这样的,去年给我实习offer了,不过也是面着玩儿的,他周六还要去做公益志愿活动
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-03 17:37
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务