剑指offer—二叉树的下一个结点

华电北风吹
天津大学认知计算与应用重点实验室
日期:2015/10/8

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

解析:分情况,看是否存在右子树

using namespace std;
/*
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)
    {
        if(pNode==NULL)
            return NULL;
        if(pNode->right!=NULL)
            return GetMin(pNode->right);
        while((pNode->next!=NULL) &&(pNode==pNode->next->right))
            pNode=pNode->next;
        return pNode->next==NULL?NULL:pNode->next;
    }
    TreeLinkNode* GetMin(TreeLinkNode* pNode)
    {
        if(pNode==NULL)
            return NULL;
        while(pNode->left!=NULL)
            pNode=pNode->left;
        return pNode;
    }
};

你可能感兴趣的:(剑指offer—二叉树的下一个结点)