public class BinaryTreeGetNext {
public static void main(String args[]) {
getNext(new BinaryTreeNode(3));
}
private static BinaryTreeNode getNext(BinaryTreeNode treeNode) {
if (treeNode == null) {
return null;
}
BinaryTreeNode mNext = null;
// 有右子树
if (treeNode.right != null) {
BinaryTreeNode mRight = treeNode.right;
while (mRight.left != null) {
mRight = mRight.left;
}
mNext = mRight;
}
// 没有右子树
else if (treeNode.parent != null) {
BinaryTreeNode mCurNode = treeNode;
BinaryTreeNode mParNode = mCurNode.parent;
while (mParNode != null && mCurNode == mParNode.right) {
mCurNode = mParNode;
mParNode = mParNode.parent;
}
mNext = mParNode;
}
return mNext;
}
private static class BinaryTreeNode {
int val;
BinaryTreeNode left;
BinaryTreeNode right;
BinaryTreeNode parent;
BinaryTreeNode(int val) {
this.val = val;
}
}
}
要点提示:
- 1、在当前节点有右子树的情况下,循环遍历右子树的左子节点及其子节点的左子节点
- 2、没有右子树的情况,判断循环结束的关键在于在当前节点父节点非空且当前节点是否等于其父节点的右子节点
- 3、当前节点等于其父节点的右子节点 表明要继续向上遍历父节点,否则遍历结束
本文深入解析了二叉树中获取中序遍历下一个节点的算法实现,详细介绍了当节点有右子树和无右子树两种情况下的处理策略,通过实例代码展示了算法的具体应用。
java&spm=1001.2101.3001.5002&articleId=90054700&d=1&t=3&u=4e5cee49aa6645c4af6208df9d77871a)
426

被折叠的 条评论
为什么被折叠?



