每日刷题 day08----二叉树的下一个节点

100 阅读1分钟

牛客网传送门

思路

image.png

第一种情况:

当节点为空的时候,直接返回

第二种情况

当节点有右子树的时候,返回其右子树的最左节点,比如B节点,他有右子树,那么找到他右子树最左边的孩子G返回即可

第二种情况

当节点没有右子树的时候:

(1) 当节点不是根节点而是根节点的左孩子时候,直接返回根节点,比如G节点,他没有右子树,但是G.next = E , e.left = G, 此时我们直接返回 G的根节点E

(2) 当节点是E的时候,E.next = B ,但是我们知道中序遍历B在E之前,此时我们就要向上遍历根节点的根节点(爷爷节点), 父节点的next = 爷爷节点 且 当爷爷节点.left = 父节点时候,返回爷爷节点,就是A

代码

        if(!pNode) return null
        if(pNode.right){
            pNode = pNode.right
            while(pNode.left){
                pNode = pNode.left
            }
            return pNode
        }
        
        while(pNode.next){
            let pRoot = pNode.next
            if(pRoot.left === pNode){
                return pRoot
            }
            pNode = pNode.next
        }

        return null