JZ8 二叉树的下一个结点

image
image

image
image

思路:
因为所有子节点都会指向父节点,所以从给定的那个节点pNode开始找,一直找到根节点root,然后用利用中序遍历,将该树的中序遍历序列存到一个容器中,然后对该容器进行遍历,找到指定节点的下一个节点。

#include <cstddef>
class Solution {
public:

    vector<TreeLinkNode*> nodes; 
    //用户得到的输入只有一个 子树根节点
    TreeLinkNode* GetNext(TreeLinkNode* pNode) {
        TreeLinkNode* root = pNode;
        
        //获取根节点
		//顺着next指针一直找就可以了,因为next只会从子节点指向根节点
        while(root->next )
            root = root->next;
        
        //中序遍历用nodes存储所有节点指针
        InOrder(root);
        int n = nodes.size();

        for(int i = 0; i<n-1;i++)
        {
            TreeLinkNode* cur = nodes[i];

            //将节点进行匹配
            if(pNode == cur)
            {
                //如果有匹配到给出的节点,则下一个节点即返回结果
                return nodes[i+1];
            }
        }
        //否则如果没有下一个节点则返回NULL
        return NULL;
    }

    //中序遍历
    void InOrder(TreeLinkNode* root)
    {
        if(root==NULL)
            return;
        InOrder(root->left);
        nodes.push_back(root);
        InOrder(root->right);
    }
};

posted @ 2024-04-22 22:02  蓝色的海嗷  阅读(1)  评论(0编辑  收藏  举报