guanpengchn / guanpengchn.github.io

:memo: code on DEV branch, blogs on ISSUES
https://guanpengchn.github.io
18 stars 9 forks source link

二叉树的下一个结点 #49

Open guanpengchn opened 5 years ago

guanpengchn commented 5 years ago

题目描述

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

/*
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){
            return nullptr;
        }
        TreeLinkNode* res = pNode;
        if(res->right){
            res = res->right;
            while(res->left){
                res = res->left;
            }
            return res;
        }else{
            res = res->next;
            while(res){
                if(res->val > pNode->val){
                    return res;
                }
                res = res->next;
            }
        }
        return nullptr;
    }
};