剑指offer_刷题记录_8二叉树的下一个结点

题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回 。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针
中序遍历顺序为:左->根->右
思路:

  • 假设给定的PNote结点的右子树不为空,那么下一个结点就为该右子树的左结点。
  • 若给定的PNote结点的右子树为空, 有两种情况:a.左子树不为空时,该结点向上遍历父结点。b.左子树为空,该结点为叶子结点,则向上遍历父结点。
    代码:
public class Solution {
    public TreeLinkNode GetNext(TreeLinkNode pNode) {
    //右子树不为空,遍历右子树对应的左节点
        if (pNode.right != null) {
            TreeLinkNode node = pNode.right;
            //左节点不为空时,返回节点
            while (node.left != null)
                node = node.left;
            return node;
        } else {
        //若左右子树都为空,返回父结点
            while (pNode.next != null) {
                TreeLinkNode parent = pNode.next;
                if (parent.left == pNode)
                    return parent;
                pNode = pNode.next;
            }
        }
        return null;
    }
}

你可能感兴趣的:(剑指offer)