二叉树的下一个结点

2年前 (2022) 程序员胖胖胖虎阿
183 0 0

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针

解题思路

中序遍历的顺序是先左子结点(左子树),再自己,最后才是右子结点(右子树),现在题目的要求是给定一个二叉树中的某一结点,求其在中序遍历顺序的下一个结点,因此根据中序遍历的性质我们不难推断:

  • 目标结点有右子树,那么它的下一个结点就是右子树最左边的结点
  • 目标结点没有右子树,也可以分成两类:
    • 目标结点是其父结点左孩子,那么父节点就是下一个结点
    • 目标结点是其父结点右孩子,找它的父结点的父结点的父结点,直到当前结点是其父结点的左孩子位置。如果没找到,说明当前结点已经是尾结点

二叉树的下一个结点

public class Solution {
    public TreeLinkNode GetNext(TreeLinkNode pNode) {
        if(pNode == null) {
            return null;
        }
        // 如果有右子树,则找右子树的最左节点
        if(pNode.right != null) {
            pNode = pNode.right;
            while(pNode.left != null) {
                pNode = pNode.left;
            }
            return pNode;
        }
        // 没右子树,则找第一个当前节点是父节点左孩子的节点
        while(pNode.next != null) {
            if(pNode.next.left == pNode) {
                return pNode.next;
            }
            pNode = pNode.next;
        }
        // 到了根节点仍没找到,则返回 null
        return null;
    }
}

版权声明:程序员胖胖胖虎阿 发表于 2022年11月5日 下午6:40。
转载请注明:二叉树的下一个结点 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...