思路
第一种情况:
当节点为空的时候,直接返回
第二种情况
当节点有右子树的时候,返回其右子树的最左节点,比如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