树
树的基础知识
function TreeNode(val) {
this.val = val;
this.left = this.right = null;
}
var num=[3,9,20,null,null,15,7]
function preorder(node) {
if(node!=null){
console.log(node.val)
preorder(node.left)
preorder(node.right)
}
}
function inorder(node) {
if(node!=null){
inorder(node.left)
console.log(node.val)
inorder(node.left)
}
}
function postorder(node) {
if(node!=null){
postorder(node.left)
postorder(node.right)
console.log(node.val)
}
}
function levelorder(root) {//层次遍历
/***
* 思路:利用一个队列,首先将根入队列,以后若队列不空则取对头元素p,
* 如果p不空,则访问之,然后将其左右子树入队列,如此循环,知道队列为空
*
* 队列:先进先出
* 尾进:push(),头出shift()
*/
// 初始化队列
var queue=[]
var level=[0]
queue.push(root)
level.push(1)
while(queue.length>0){
var nodep=queue.shift()// 取队列头元素p
if(nodep!=null) {//若节点不为空则左右孩子入队列
// console.log(nodep.val)// 访问该节点
queue.push(nodep.left)
queue.push(nodep.right)
level.push(level[parseInt(level.length / 2)] + 1)
level.push(level[parseInt(level.length / 2)] + 1)
}
}
level.sort(function (a,b) {
return a-b
})
return level.pop()-1
}
function dfsorder(root) { //DFS深度优先遍历
if(root==null){
return 0
}else{
var leftheight=arguments.callee(root.left)
var rightheight=arguments.callee(root.right)
return Math.max(leftheight,rightheight)+1
}
}
function BSTorder(root){
/***
* 搜索树的特点:
* 1. 采用中序遍历则是从大到小排列
*/
if(root!=null){
BSTorder(root.left)
console.log(root.val)
BSTorder(root.right)
}
}