[剑指offer]面试题58:二叉树中的下一个结点

来源:互联网 发布:网络灯谜群会2015 编辑:程序博客网 时间:2024/06/05 08:24

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


/*struct TreeLinkNode {    int val;    struct TreeLinkNode *left;    struct TreeLinkNode *right;    struct TreeLinkNode *next;    TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {}};*/class Solution {public:    TreeLinkNode* GetNext(TreeLinkNode* pNode)    {        // 如果pNode为空,返回NULL        if(pNode == NULL)            return NULL;        // pNext 存放返回结果        TreeLinkNode* pNext = NULL;        // 如果右子树不为空,找到右子树的最左叶子        if(pNode->right != NULL){            TreeLinkNode* pRight = pNode->right;            while(pRight->left != NULL)            pRight = pRight->left;            pNext = pRight;        }else if(pNode->next != NULL){            TreeLinkNode* pCurrent = pNode;            TreeLinkNode* pParent = pNode->next;            while(pParent != NULL && pCurrent == pParent->right){                pCurrent = pParent;                pParent = pParent->next;            }            pNext = pParent;        }        return pNext;    }};
阅读全文
0 0
原创粉丝点击