二叉树的下一个节点

题目描述

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:此题包含三步:
1. 如果此节点有右子树,下一个节点为右子节点的最左边的节点。
2.如果此节点没有右子树,并且如果此节点是其父节点的左子节点,则下一个节点为父节点。
3.如果此节点没有右子树,并且如果此节点是其父节点的右子节点,则一直向上找,直到找到第一个是其父节点左节点的节点,下一个节点就为此节点。
public TreeLinkNode GetNext(TreeLinkNode pNode)
    {
        if(pNode == null) return null;
        TreeLinkNode pNext = null;
        if(pNode.right!=null){
            TreeLinkNode temp = pNode.right;
            while(temp.left!=null){
                temp = temp.left;
            }
            pNext = temp;
        }else{
            TreeLinkNode pParent = pNode.next;
            TreeLinkNode current = pNode;
            while(pParent!=null && pNode == pParent.right){
                pNode = pParent;
                pParent = pParent.next;
            }
            pNext = pParent;
        }
        return pNext;
    
    }
原文地址:https://www.cnblogs.com/yingpu/p/5834036.html