剑指Offer JZ57 二叉树的下一个结点(JavaScript)

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M 热度指数:370932
本题知识点: 树

题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

思路:
查找中序遍历下一个节点,
节点有右子树,下一个节点为右子树最左的元素;
节点处于左子树,下一个节点为父节点,若next即父节点的左子树等于该节点,那么其下一个元素就是该父节点

/*function TreeLinkNode(x){
    this.val = x;
    this.left = null;
    this.right = null;
    this.next = null; 父节点
}*/
function GetNext(pNode)
{
    
    
    // write code here
    if(pNode === null) return null
    //节点有右子树,下一个节点为右子树最左的元素
    if(pNode.right){
    
    
        pNode = pNode.right
        while(pNode.left){
    
    
            pNode = pNode.left
        }
        return pNode
    }
    //节点处于左子树,下一个节点为父节点
    while(pNode.next){
    
    
        //等于左子树,那么按照中序遍历,下一个元素就是父节点
        if(pNode == pNode.next.left){
    
    
            return pNode.next
        }
        pNode = pNode.next
    }
}

答案参考自:新一代的超人

猜你喜欢

转载自blog.csdn.net/weixin_44523860/article/details/115027605