LeetCode 106.从中序与后序遍历序列构造二叉树
本文最后更新于621 天前,其中的信息可能已经过时,如有错误请发送邮件到tomding1065@gmail.com


题目链接/文章讲解/视频讲解:https://programmercarl.com/0106.%E4%BB%8E%E4%B8%AD%E5%BA%8F%E4%B8%8E%E5%90%8E%E5%BA%8F%E9%81%8D%E5%8E%86%E5%BA%8F%E5%88%97%E6%9E%84%E9%80%A0%E4%BA%8C%E5%8F%89%E6%A0%91.html

1.这个题难度不小,但是看了一遍视频,然后跟着文字的叙述还是可以自己跟着思路写出代码了,可能是我最近的练习也是小有成效了,这个题给我最关键的部分就是去切割后序和中序的数组,自己写的时候还在想,我难道需要把4个部分的左右的节点都分别放在一个数组里嘛,这样内存开销是不是太大了,结果还真是,做完这个题给我的感觉是我对于边界条件和剪枝,递归的结束条件等都有更深刻的简介了。相信自己也会对二刷更有信心啦。

CPP

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode *traversal(vector<int>& inorder,vector<int>& postorder){
        if(postorder .size()== 0)return NULL;

        int rootValue = postorder[postorder.size() -1];
        TreeNode *root = new TreeNode(rootValue);

        if(postorder.size() == 1)return root;

        int delimiter = 0;
        for(;delimiter < inorder.size() -1;delimiter ++ ){
            if(rootValue == inorder[delimiter])break;
        }

        vector<int>leftInorder(inorder.begin() , inorder.begin() + delimiter);

        vector<int>rightInorder(inorder.begin() + delimiter + 1 , inorder.end());

        postorder.resize(postorder.size() - 1);

        vector<int>leftPostorder(postorder.begin() , postorder.begin() + leftInorder.size());

        vector<int>rightPostorder(postorder.begin() + leftInorder.size() , postorder.end());

        root->left = traversal(leftInorder , leftPostorder);
        root->right = traversal(rightInorder , rightPostorder);

        return root;
    }
    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
        if(inorder.size() == 0 || postorder.size() == 0)return NULL;
        return traversal(inorder , postorder);
    }
};
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
Cream_dpl