首页 > 其他分享 >前序中序构建二叉树 OFF7

前序中序构建二叉树 OFF7

时间:2022-10-01 18:44:12浏览次数:50  
标签:preorder right TreeNode int 中序 vector 二叉树 前序 left

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        if(preorder.size()==0){
            return NULL;
        }
        if(preorder.size()==1){
            TreeNode* root=new TreeNode(preorder[0]);
        }
        TreeNode* head=new TreeNode(preorder[0]);//先序序列第一个为根节点
        vector<int> newIn_left;
        vector<int> newIn_right;
        int f=0;
        /**
            在中序序列中,把根节点左边和右边的序列都拿出来
        */
        for(int i=0;i<preorder.size();i++){
            if(inorder[i]!=preorder[0]&&f==0){
                newIn_left.push_back(inorder[i]);
              //  cout<<"newInleft "<<inorder[i]<<endl;
            }
            if(f==1){
                //cout<<"newInright "<<inorder[i]<<endl;
                newIn_right.push_back(inorder[i]);
            }
            if(inorder[i]==preorder[0]){
                f=1;
            }
        }
        //cout<<newIn_left.size()<<endl;
        vector<int> newPre_left;
        vector<int> newPre_right;
         /**
            在前序序列中,把根节点左边和右边的序列都拿出来
        */
        for(int i=1;i<preorder.size();i++){
            if(i<1+newIn_left.size()){
                //cout<<"newPreleft "<<preorder[i]<<endl;
                newPre_left.push_back(preorder[i]);
            }else{
                //cout<<"newPreRihjt "<<preorder[i]<<endl;
                newPre_right.push_back(preorder[i]);
            }
            
        }
        head->left=buildTree(newPre_left,newIn_left);
        head->right=buildTree(newPre_right,newIn_right);
        return head;
        
    }
};

标签:preorder,right,TreeNode,int,中序,vector,二叉树,前序,left
From: https://www.cnblogs.com/lwx11111/p/16747581.html

相关文章

  • PTA 21级数据结构与算法实验5—树和二叉树
    目录7-1还原二叉树7-2朋友圈7-3修理牧场7-4玩转二叉树7-5根据后序和中序遍历输出先序遍历7-6完全二叉树的层序遍历7-7列出叶结点7-8部落7-9建立与遍历二叉树7-10......
  • leetcode 226. Invert Binary Tree 翻转二叉树(简单)
    一、题目大意给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输......
  • P1040 [NOIP2003 提高组] 加分二叉树
    区间dp好题!在更新\(f[i][j]\)时,顺便记录该子树的根节点\(g[i][j]\)。最后递归求解。#include<bits/stdc++.h>usingnamespacestd;classsolve{ public: int......
  • 二叉树 Leecode总结
    Leecode107:层序遍历,从叶子节点到根节点正常的层序遍历之后,对resList进行反转,调用Collections.reverse(resList);或者每次添加list时,从resList的头部开始添加clas......
  • 二叉树的前中后序遍历的两种方法
    前中后序遍历的记忆方式:前中后可以记为中间节点的顺序位置,如:前序遍历:中左右;中序遍历:左中右;后续遍历:左右中。//前序遍历:算法实现:前序遍历顺序为中左右。需要传......
  • 二叉树前中后序遍历的两种方式
    前中后序遍历的记忆方式:前中后可以记为中间节点的顺序位置,如:前序遍历:中左右;中序遍历:左中右;后续遍历:左右中。//前序遍历:算法实现:前序遍历顺序为中左右。需要传......
  • leetcode 617. Merge Two Binary Trees 合并二叉树(简单)
    一、题目大意给你两棵二叉树:root1和root2。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉......
  • 二叉树遍历
    前序遍历A->C->D->E->F->H->G->Bvoidtraversal(Node*node){if(!node->left&&node->right){res.push_back(node);return;)if(node->left)traversal(nod......
  • 今日部分知识点总结———SQL注入,hooks的优缺点,cookies,xxxStorage的区别,BFC,合并二叉
    SQL注入在浏览器页面用户提交数据处,输入特定的字符实现sql语句的篡改,从而对数据库进行操作。比如在一个登录界面,要求输入用户名和密码,可以这样输入实现免帐号登录;用户名......
  • 二叉树的遍历方式(创建,遍历,执行)
    //binarytree.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。//#include<iostream>usingnamespacestd;typedefstructNODE{charch;N......