首页 > 其他分享 >给出二叉树的前序遍历和中序遍历--还原二叉树

给出二叉树的前序遍历和中序遍历--还原二叉树

时间:2024-04-19 23:35:04浏览次数:28  
标签:遍历 idxroot int 中序 二叉树 前序

void f(int idxroot){				//根据前序遍历和中序遍历还原二叉树
    if(idxroot==n+1) return;
    int root=pre[idxroot];
    bool check=true;
    map<int,int> lcmp,rcmp;   //当前节点的左孩子集合和右孩子集合
    for(int i=1;i<=n;i++){
        if(vis[mid[i]]&&mid[i]!=root&&!check) break;     //key!
        if(mid[i]==root){
            check=false;
            continue;
        }
        if(check&&!vis[mid[i]])	lcmp[mid[i]]=1;
        else if(!check&&!vis[mid[i]]) rcmp[mid[i]]=1;
    }
    for(int i=1;i<=n;i++){					//在前序遍历中遇到的第一个左孩子集合中的点,就是root的左孩子;右孩子同理
        if(lcmp[pre[i]]&&vct[root].lc==0){
            vct[root].lc=pre[i];
            vis[pre[i]]=1;
        }
        else if(rcmp[pre[i]]&&vct[root].rc==0){
            vct[root].rc=pre[i];
            vis[pre[i]]=1;
            break;
        }
    }
    f(idxroot+1);
}

这个是自己在写题:7-12 玩转二叉树 - SMU 2024 spring 天梯赛4(补题) (pintia.cn)的时候,研究出来的。题是通过了(可能数据不强),不知道这个代码是不是百分百没问题。

标签:遍历,idxroot,int,中序,二叉树,前序
From: https://www.cnblogs.com/ouhq/p/18146991

相关文章

  • JZ32 从上往下打印二叉树
    /*structTreeNode{intval;structTreeNode*left;structTreeNode*right;TreeNode(intx):val(x),left(NULL),right(NULL){}};*/classSolution{public:vector<int>PrintFromTopToBottom(TreeNode*root){......
  • JZ33 二叉排序树的后序遍历序列
    classSolution{public://判断该数组是不是某二叉搜索树的后序遍历的结果。//如果是则返回true,否则返回false//注意传入参数是一个int类型的vector容器boolVerifySquenceOfBST(vector<int>sequence){if(sequence.empty()) //二叉树......
  • Effective Python:第8条 用zip函数同时遍历两个迭代器
    用Python内置的zip函数来实现。这个函数能把两个或更多的iterator封装成惰性生成器(lazygenerator)。每次循环时,它会分别从这些迭代器里获取各自的下一个元素,并把这些值放在一个元组里面。names=["Cecilia","Lise","Marie"]counts=[len(n)forninnames]max_count=......
  • 树3-二叉树非递归遍历(栈)
    树3-二叉树非递归遍历(栈)拷贝根结点,初始值FALSE,入栈弹出,如果是FALSE,将根节点将更新为TRUE,其子结点(初始值FALSE)一并入栈[A,B,C](前序遍历,入栈顺序:C,B,A输出顺序:A,B,C)再弹出,如果是TRUE则输出引入链式栈头文件#include"linkedStack.h"链式栈头文......
  • JZ36二叉树排序树与双向链表
    /*structTreeNode{ intval; structTreeNode*left; structTreeNode*right; TreeNode(intx): val(x),left(NULL),right(NULL){ }};*/#include<cstddef>classSolution{public: TreeNode*ans=nullptr; //最终的链表 TreeNode*pre=nullptr; ......
  • 树1-二叉树概念与遍历方法
    树1:二叉树概念与遍历方法二叉树二叉树的遍历二叉树遍历分为前序,中序,后序.序是指遍历根结点的顺序D-data,根L左R右,先序遍历ABCDE-FGH中序遍历BDCE-A-FHG后序遍历DECB-HGF-A先序遍历ABDH-I-EJCFG中序遍历HDI-B-JEAFCG后序遍历HID-J......
  • 树2-二叉树拷贝, 遍历, 计算叶子结点和高度
    树2-二叉树拷贝,遍历,计算叶子结点和高度二叉树结点typedefstructBinaryNode{charch;structBinaryNode*lChild;structBinaryNode*rChild;}BinaryNode;//叶子结点的数量intsum;二叉树遍历前序//递归遍历(前序)voidRecursion(BinaryNode*roo......
  • vue3 获取遍历的子组件
    <template><div><!--使用v-for遍历数据,并为每个子组件设置一个ref--><ChildComponentv-for="(item,index)initems":key="index":ref="el=>setChildRef(el,index)"/></div>......
  • 2024-04-17:用go语言,欢迎各位勇者莅临力扣城,本次的挑战游戏名为「力扣泡泡龙」。 游戏
    2024-04-17:用go语言,欢迎各位勇者莅临力扣城,本次的挑战游戏名为「力扣泡泡龙」。游戏的起点是一颗形状如二叉树的泡泡树,其中每个节点的值代表该泡泡的分值。勇者们有一次机会可以击破一个节点泡泡,但需要满足以下规则:被击破的节点泡泡最多只能有一个子节点泡泡。如果被击破的节点......
  • VBS遍历文件或文件夹路径输入文件的所有绝对路径(附源码)
    <p>源码如下:</p>FunctionlistFilesPath(filepath)t1=Timer()Debug.WriteLine"****现在开始执行计数,用时:"+CStr(t1)Setfso=CreateObject("scripting.filesystemobject")Setmyfolder=fso.GetFolder(filepath)......