跳转至

08.二叉树的下一个结点*

题目描述*

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

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

最后更新: July 23, 2022