AcWing打卡活动
《剑指Offer》打卡活动
周一第七题 二叉树的下一个节点
public TreeNode inorderSuccessor(TreeNode p) {
// 中序遍历, 左根右
// 若该节点有右子节点,则遍历该节点的右子节点的子节点
if(p.right != null) {
p = p.right;
while(p.left != null) {
p = p.left;
}
return p;
}
// 若该节点为父节点的左节点(或父节点不存在),则不会进入下面的循环,将直接返回父节点
// 若该节点为父亲的右节点,则会一直向上遍历,直到找出父节点的右节点,符合中序遍历
while(p.father != null && p.father.right == p) {
p = p.father;
}
return p.father;
}