五分钟掌握:二叉树的下一个节点
约 348 字大约 1 分钟
2025-02-27
给定二叉树其中的一个结点,请找出其中序遍历顺序的下一个结点并且返回。
注意,树中的结点不仅包含左右子结点,而且包含指向父结点的指针。
满足node.parent.left=node的node是什么意义?以9为例,9不是左子树,向上扩散一下,5,8,9也不是, 再扩散,2,4,5,7,8,9是1的左子树,此时2就是满足条件的node。以4为例,它是2的左子树,所以4就是这个node。
我们要找自底向上的第一个左子树的根节点。
public class Solution {
TreeLinkNode GetNext(TreeLinkNode node) {
if (node == null) return null;
if (node.right != null) { // 如果有右子树,则找右子树的最左节点
node = node.right;
while (node.left != null) node = node.left;
return node;
}
while (node.parent != null) { // 没右子树,则找第一个这样的节点,它是它的父节点的左孩子。parent 指向父节点。
// 检查当前节点是不是它的父节点的左子节点。如果不是,则向上,上完再检查,直到找到第一个满足条件的节点。
// 然后返回它的根节点。
if (node.parent.left == node) return node.parent;
node = node.parent;
}
return null; // 退到了根节点仍没找到,则返回null
}
}