剑指Offer:57-二叉树的下一个结点

题目描述

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

思路

实现

/*
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;
        //如果右子树存在,返回右子树的最左侧节点
        if(pNode->right)
        {
            TreeLinkNode* rightChild = pNode->right;
            while(rightChild->left)
                rightChild = rightChild->left;
            return rightChild;
        }
        //如果右子树不存在,则向上找到当前节点不是父节点的右孩子的那个节点,返回其父节点就是下一个节点
        else
        {
            TreeLinkNode* child = pNode;
            TreeLinkNode* parent = child->next;
            while(parent && parent->right == child)
            {
                child = parent;
                parent = child->next;
            }
            return parent;
        }
    }
};

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