利用层次遍历原理构建二叉树

层次遍历构建二叉树:

1.定义二叉树节点:

1 function TreeNode(val){
2     this.val = val;
3     this.left = this.right = null;
4 }

2.层次遍历构建二叉树:

 1 function createTree(arr){
 2     if(!arr||!arr.length)return null;
 3     var root = new TreeNode(arr.shift());
 4     var list = [root];
 5     while(arr.length){
 6         var tmpList = [];
 7         for(var i=0;i<list.length;i++){
 8             var p = list[i];
 9             p.left = new TreeNode(arr.shift());
10             p.right = new TreeNode(arr.shift());
11             if(p.left){
12                tmpList.push(p.left);
13             }
14             if(p.right){
15                tmpList.push(p.right);
16             }
17         }
18         list = tmpList;
19     }
20     return root;
21 }

3.测试

//var arr = [1,2,2,3,4,4,3];
var arr = [1,2,2,null,3,null,3];
var root = createTree(arr);
console.log(root);

原文地址:https://www.cnblogs.com/davidxu/p/9031055.html

时间: 2024-10-10 00:30:36

利用层次遍历原理构建二叉树的相关文章

采用先序遍历 和层次遍历递归建立二叉树--进行封装

1 package com.offer; 2 3 public class TreeNode { 4 5 int val = 0; 6 TreeNode left = null; 7 TreeNode right = null; 8 9 public TreeNode(int val) 10 { 11 this.val=val; 12 } 13 14 public TreeNode() 15 { 16 CreateBinaryTree();// 采用默认的 17 //preShow(this.r

数据结构与算法备忘:根据层次顺序存储结构构建二叉树

在存储满二叉树或近似满二叉树时,按节点层次顺序存储是个不错的主意,我们从根节点开始,逐层由左到右扫描各个节点,依次将节点数据存放到指定的数组中,如果偶尔遇到空的子节点,就用特殊符号来表示. 这个树结构已接近满二叉树了,如果使用按层次顺序存储,将会更简单,更节省空间.按照上面的方法,这棵树所对应的存储结构应该是: ['A', 'B', 'E', 'C', 'D', '#', 'F'] 其中空的子节点,我们使用#号来占位. 根据这个存储结构,我们就可以构建出一棵二叉树,还原它本来的面目. 思路如下:

已知前序(后序)遍历序列和中序遍历序列构建二叉树(Leetcode相关题目)

1.文字描述: 已知一颗二叉树的前序(后序)遍历序列和中序遍历序列,如何构建这棵二叉树? 以前序为例子: 前序遍历序列:ABCDEF 中序遍历序列:CBDAEF 前序遍历先访问根节点,因此前序遍历序列的第一个字母肯定就是根节点,即A是根节点:然后,由于中序遍历先访问左子树,再访问根节点,最后访问右子树,所以我们找到中序遍历中A的位置,然后A左边的字母就是左子树了,也就是CBD是根节点的左子树:同样的,得到EF为根节点的右子树. 将前序遍历序列分成BCD和EF,分别对左子树和右子树应用同样的方法,

由二叉树的中序遍历, 前序遍历, 构建二叉树

struct TreeNode { struct TreeNode* left; struct TreeNode* right; char elem; }; TreeNode* BinaryTreeFromOrderings(char* inorder, char* preorder, int length) { if(length == 0) { return NULL; } TreeNode* node = new TreeNode;//Noice that [new] should be

二叉树 的先序 中序、后序遍历、层次遍历以及树状打印等操作

#include <stdio.h> #include <stdlib.h> #define MAXSIZE 50 typedef struct Node { char data; struct Node *LChild; struct Node *RChild; }BiTNode,*BiTree; typedef struct { BiTree element[MAXSIZE]; int front; int rear; }SeqQueue; /*初始化队列*/ void Ini

1040. 二叉树层次遍历

Description 给出一棵二叉树,求它的层次遍历结果. [二叉树的遍历问题是一种精神,务必领会] Input Format 第一行,N<1000000,表示二叉树节点数. 默认序号为0的节点为树根.接下来共N-1行,依次表示序号为1,...,N-1的节点的父亲节点序号. 如果一个节点有两个孩子节点,左孩子节点序号总是小于右孩子节点序号. Output Format 仅一行,二叉树的层次遍历结果.节点序号间用空格隔开. Hint Sample Input 6 0 1 1 0 4 Sample

数据结构:树的BFS,树的层次遍历! 按先序遍历创建一棵树,然后以层次遍历输出。

按先序遍历创建一棵树,以层次遍历输出 样例输入 A B # D # # C E # # F # # 样例输出 LevelOrder: A B C D E F 代码: #include <iostream> #include <queue> using namespace std; struct node { //表示一个树上的节点 char ch; node *left, *right; }; node* creat() { //以递归的方式构造一棵二叉树 node *root =

二叉树各种相关操作(建立二叉树、前序、中序、后序、求二叉树的深度、查找二叉树节点,层次遍历二叉树等)(C语言版)

将二叉树相关的操作集中在一个实例里,有助于理解有关二叉树的相关操作: 1.定义树的结构体: 1 typedef struct TreeNode{ 2 int data; 3 struct TreeNode *left; 4 struct TreeNode *right; 5 }TreeNode; 2.创建根节点: 1 TreeNode *creatRoot(){ 2 TreeNode * root =(TreeNode *)malloc(sizeof(TreeNode)); 3 if(NULL=

先序遍历和后序遍历构建二叉树

递归的方法利用先序遍历和中序遍历构建二叉树,同样也可以利用到中序遍历和后序遍历构建二叉树. //利用先序遍历和中序遍历构建二叉树 TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { TreeNode *root=NULL; if(preorder.size()==0||inorder.size()==0||preorder.size()!=inorder.size()) return