二叉树的构建
树的构造函数后面就直接简写(主要是针对数组中树的擦欧哦中)
一、 普通二叉树
function createTree ( arr) {
const bt = new TreeNode ( arr. shift ( ) ) ;
let queue = [ ] ;
queue. push ( bt) ;
while ( arr. length) {
let cur = queue. shift ( ) ;
cur. left = new TreeNode ( arr. shift ( ) ) ;
cur. right = new TreeNode ( arr. shift ( ) ) ;
cur. left && queue. push ( cur. left) ;
cur. right && queue. push ( cur. right) ;
}
return bt;
}
let arr = [ 1 , 2 , 3 , 4 , 5 ] ;
console. log ( createTree ( arr) ) ;
二 、完全二叉树
function TreeNode ( data) {
this . data = data;
this . left = this . right = null ;
}
function create ( arr, i) {
if ( i > arr. length - 1 ) {
return ;
}
let t = new TreeNode ( arr[ i] ) ;
t. left = create ( arr, 2 * i + 1 ) ;
t. right = create ( arr, 2 * i + 2 ) ;
return t;
}
let arr = [ 1 , 2 , 3 , 4 , 5 , 6 ] ;
console. log ( create ( arr, 0 ) ) ;
三、 二叉搜索树
先序遍历,对输入数据与新的根节点比较(注意b,p两个指针配合查找!!!)
function BinarySortTree ( arr) {
const bst = new TreeNode ( arr. shift ( ) ) ;
while ( arr. length) {
let cur = new TreeNode ( arr. shift ( ) ) ;
let base = bst;
let parent;
while ( true ) {
parent = base;
if ( cur. data < base. data) {
base = base. left;
if ( ! base) {
parent. left = cur;
break ;
}
} else {
base = base. right;
if ( ! base) {
parent. right = cur;
break ;
}
}
}
}
return bst;
}
let arr = [ 5 , 2 , 4 , 7 , 6 ] ;
console. log ( BinarySortTree ( arr) ) ;