首页 > 其他分享 >根据数组构建二叉树

根据数组构建二叉树

时间:2022-08-15 08:55:11浏览次数:53  
标签:node right TreeNode nums int 构建 二叉树 数组 left

// """
// 给定一个非空列表,一层一层的构建一个二叉树。

// 例如:
// input=[5,7,9,2,4,6,3,1,8,10]
   
// 我希望返回结果:
//          5(0)
//         /    \
//       7(1)     9(2)
//     /    \   /  \
//    2(3)      4(4)  6(5)   3(6)
//  /    \     /
// 1(7)   8(8) 10(9)  

// 请输出这个树每个节点和其子节点的值,以便我们确定这个树的构建是正确的。


// class TreeNode(object):
//     def __init__(self, x):
//         self.val = x
//         self.left = None
//         self.right = None


// #生成一个根结点,作为树的起始节点
// root=TreeNode(-1)

// """

#include <iostream>
#include <vector>
#include <queue>
#include <memory>
using namespace std;


class TreeNode{
    public: 
    TreeNode(int val):val_(val)
    {};
    TreeNode* left = nullptr;
    TreeNode* right = nullptr;
    int val_ = 0;
};

TreeNode* build(const vector<int>& nums,int index)
{    
    int n = nums.size();
    int left = 2 * index + 1;
    int right = 2 * index + 2;
    TreeNode* node = new TreeNode(nums[index]);    
    if(left > n - 1)node->left = nullptr;
    else
    node->left = build(nums,left);
    if(right > n - 1)node->right = nullptr;
    else node->right = build(nums,right);
    return node;

}

vector<vector<int>>levelOrder(TreeNode* root)
{    
    vector<vector<int>>res;
    if(nullptr == root)return res;
    queue<TreeNode*>q;
    q.push(root);
    while(!q.empty())
    {
        int size = q.size();
        vector<int>tmp;
        for(int i = 0; i < size; ++i)
        {
            TreeNode* cur = q.front();
            q.pop();
            tmp.push_back(cur->val_);
            if(cur->left)q.push(cur->left);
            if(cur->right)q.push(cur->right);
        }
        res.push_back(tmp);
    }
    return res;

    
}


int main()
{
    vector<int>nums{5,7,9,2,4,6,3,1,8,10};
    TreeNode* node = build(nums,0);
    auto res = levelOrder(node);
    for(auto nums:res)
    {
        for(auto num : nums)
        {
            cout << num <<" ";
        }
        cout << endl;
    }
    return 0;
}

 

标签:node,right,TreeNode,nums,int,构建,二叉树,数组,left
From: https://www.cnblogs.com/fourmi/p/16587032.html

相关文章

  • 力扣 101. 对称二叉树
    101.对称二叉树给你一个二叉树的根节点 root ,检查它是否轴对称。示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输......
  • Java数组
    Java数组一、数组声明创建1、声明数组:数组元素类型数组名[]/[][]数组元素类型[]/[][]数组名为数组分配元素:数组名=new数组元素类型[数组元素个数]2、声明和创......
  • 从1到4选出不重复的3个数组成,能有多少种组合
    importitertoolsa=range(1,5)y=list(itertools.permutations(a,3))print(y)输出:[(1,2,3),(1,2,4),(1,3,2),(1,3,4),(1,4,2),(1,4,3),(2,......
  • 《Effective Java》第54条:返回零长度的数组或者集合,而不是null
    《EffectiveJava》第54条:返回零长度的数组或者集合,而不是null一、问题如果一个方法返回类型是list,如果结果为空的情况下返回null的情况并不少见,如下:publicclassShop_......
  • 数组
    数据结构数据的结构(逻辑结构存储结构算法)存储结构(数据存储的结构方式)**线性结构数组(顺序表)队列栈堆链表非线性结构树图hash(散列表)只要是能存储数据的容器,必......
  • 数组应用!!!
    稀疏数组类似棋盘上的棋子:用二维数组保存:用稀疏数组来保存:publicclassXiShu{publicstaticvoidmain(String[]args){//创造二维数组i......
  • 3、构建实时数据仓库-ods和dim层构建
    3、构建实时数据仓库项目平台搭建架构及其总体流程1、flink整合hive的catalog因为本项目中的对应kafka中的表都存在hive的元数据库中,所以需要创建一个hive的catalo......
  • 剑指 Offer 07. 重建二叉树
    1.题目:输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 示例1:  Input:pre......
  • JDK数组阻塞队列源码深入剖析
    JDK数组阻塞队列源码深入剖析前言在前面一篇文章从零开始自己动手写阻塞队列当中我们仔细介绍了阻塞队列提供给我们的功能,以及他的实现原理,并且基于谈到的内容我们自己实......
  • 数组根据时间戳排序
    exportfunctioncompare(arr,key,type="asc"){returnarr.sort((value1,value2)=>{constval1=value1[key];constval2=value2[key];//re......