从中序与后序遍历序列构造二叉树(C++实现)

简介: 从中序与后序遍历序列构造二叉树(C++实现)


题目

力扣:从中序与后序遍历序列构造二叉树


思路

代码

class Solution {
public:
    TreeNode* _build(vector<int>& inorder, vector<int>& postorder,int & peri,int lefti,int righti)
    {
        if(lefti>righti)
        {
            return nullptr;
        }
        int rooti=0;
        while(rooti<=righti)
        {
            if(postorder[peri]==inorder[rooti])
            {
                break;
            }
            rooti++;
        }
        //[lefti,rooti-1][rooti][rooti+1,righti]
        TreeNode * root=new TreeNode(postorder[peri--]);
        root->right=_build(inorder,postorder,peri,rooti+1,righti);
        root->left=_build(inorder,postorder,peri,lefti,rooti-1);
        return root;
    }
    TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder)
    {
        int i=postorder.size()-1;
        TreeNode *root=_build(inorder,postorder,i,0,postorder.size()-1);
        return root;
    }
};

代码讲解

_build 函数是一个递归函数,用于构建二叉树的子树。它接收中序遍历序列 inorder、后序遍历序列 postorder、一个引用 peri、当前子树的左边界 lefti 和右边界 righti 作为参数。

首先,检查左边界 lefti 是否大于右边界 righti,如果是,说明当前子树为空,返回 nullptr。
在后序遍历序列中,找到当前根节点的值 postorder[peri] 在中序遍历序列中的位置 rooti。
创建一个新的节点 root,值为 postorder[peri–],即后序遍历序列的最后一个元素。
递归地调用 _build 函数构建右子树,传入中序遍历序列 inorder、后序遍历序列 postorder、引用 peri、rooti+1 和 righti 作为参数。
递归地调用 _build 函数构建左子树,传入中序遍历序列 inorder、后序遍历序列 postorder、引用 peri、lefti 和 rooti-1 作为参数。
返回根节点 root。


buildTree 函数是主函数,用于调用 _build 函数构建整棵二叉树。它接收中序遍历序列 inorder 和后序遍历序列 postorder 作为参数。

初始化变量 i 为 postorder 的最后一个索引,即后序遍历序列的最后一个元素。
调用 _build 函数构建二叉树的根节点,传入中序遍历序列 inorder、后序遍历序列 postorder、引用 i、0 和 postorder.size()-1 作为参数。
返回构建的二叉树的根节点 root。

(本题完)

相关文章
|
4天前
|
C++
二叉树进阶面试题(精华总结)【C++版本】
二叉树进阶面试题(精华总结)【C++版本】
|
4天前
|
数据安全/隐私保护 C++
C++ 构造函数实战指南:默认构造、带参数构造、拷贝构造与移动构造
C++中的构造函数是特殊成员函数,用于对象初始化。类型包括默认构造函数(无参数)、带参数构造函数、拷贝构造函数和移动构造函数。默认构造函数设置对象默认状态,带参数构造函数允许传递初始化值。拷贝构造函数复制已有对象,移动构造函数高效转移资源。构造函数的访问权限可控制为public、private或protected。理解构造函数有助于编写健壮的C++代码。关注公众号`Let us Coding`获取更多内容。
25 0
|
4天前
|
存储 C++
二叉树的操作(C++实现)
二叉树的操作(C++实现)
|
4天前
|
C++
3. C++构造和析构
3. C++构造和析构
31 0
|
4天前
|
存储 C++
【C++练级之路】【Lv.14】二叉搜索树(进化的二叉树——BST)
【C++练级之路】【Lv.14】二叉搜索树(进化的二叉树——BST)
【C++练级之路】【Lv.14】二叉搜索树(进化的二叉树——BST)
|
4天前
|
存储 算法 数据管理
C++中利用随机策略优化二叉树操作效率的实现方法
C++中利用随机策略优化二叉树操作效率的实现方法
78 1
|
4天前
|
设计模式 安全 算法
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
18 0
|
2天前
|
测试技术 C++
C++|运算符重载(3)|日期类的计算
C++|运算符重载(3)|日期类的计算
|
4天前
|
C语言 C++ 容器
C++ string类
C++ string类
9 0
|
4天前
|
C++ Linux