题解 | #输出二叉树的右视图#

输出二叉树的右视图

https://www.nowcoder.com/practice/c9480213597e45f4807880c763ddd5f0

解题思路:先建树,再使用层序遍历获得右视图


class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 求二叉树的右视图
     * @param xianxu int整型vector 先序遍历
     * @param zhongxu int整型vector 中序遍历
     * @return int整型vector
     */
    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) 
    {
        int m = pre.size();
        int n = vin.size();
        if(m == 0 || n == 0)
        {
            return nullptr;
        }
        TreeNode *s = new TreeNode(pre[0]);
        for(int i = 0;i<vin.size();++i)
        {
            if(vin[i] == pre[0])
            {
                vector<int> preleft(pre.begin()+1,pre.begin()+i+1);
                vector<int> vinleft(vin.begin(),vin.begin()+i);
                s->left = reConstructBinaryTree(preleft,vinleft);

                vector<int> preright(pre.begin()+i+1,pre.end());
                vector<int> vinright(vin.begin()+i+1,vin.end());
                s->right = reConstructBinaryTree(preright,vinright);
            }
        }
        return s;

    }
    vector<int> solve(vector<int>& xianxu, vector<int>& zhongxu) {
        // write code here
        TreeNode *root = reConstructBinaryTree(xianxu,zhongxu);
        vector<int> res;
        queue<TreeNode*> q;
        q.push(root);
        TreeNode *cur;
        //层序遍历的最后一个结点就是右视图
        while(!q.empty())
        {
            int n = q.size();
            for(int i = 0;i<n;++i)
            {
                cur = q.front();
                if(i == n-1)
                    res.push_back(cur->val);
                q.pop();
                if(cur->left)
                    q.push(cur->left);
                if(cur->right)
                    q.push(cur->right);
            }
        }
        return res;   
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务