排序二叉树
如上图为典范的排序二叉树,左孩子的值比节点的值小,右孩子的值比节点的值大,关于详细的树的定义及二叉树的定义能够百度或查阅相干材料。
排序二叉树的建立
- 建立道理
排序二叉树的建立道理与排序二叉树的定义一致,即左孩子的值比当前节点的值小,右孩子的值比当前节点的值大。 - 代码完成
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>binary-tree</title>
<link rel="stylesheet" href="">
</head>
<body>
<script type="text/javascript" charset="utf-8">
//建立一个排序二叉树
//
function BinaryTree() {
//节点类
var Node = function(key) {
this.key = key
this.left = null
this.right = null
}
// 根节点
var root = null
// 1
var insertNode = function(node, newNode) {
if(node !== null) {
if(newNode.key < node.key) {
insertNode(node.left, newNode)
if(node.left == null) {
node.left = newNode
}
}else{
insertNode(node.right, newNode)
if(node.right == null) {
node.right = newNode
}
}
}
return null
}
//插进去节点
this.insert = function(key) {
var newNode = new Node(key)
if(root === null) {
root = newNode
}else {
insertNode(root, newNode)
}
}
this.getTree = function() {
return root
}
}
var tree = new BinaryTree()
var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 11, 15]
nodes.forEach(function(item) {
tree.insert(item)
})
console.log(tree.getTree())
</script>
</body>
</html>
以上就是建立排序二叉树的完成体式格局:
重点在于插进去节点的详细完成,即诠释1的代码片断。
个中比较难明白的点在于递归是怎样实行,
取当前的节点为{key: 1, left:null, right:null},则当前树以下图:
对该树举行插进去
var insertNode = function(node, newNode) {
if(node !== null) {
if(newNode.key < node.key) {
insertNode(node.left, newNode)
if(node.left == null) {
node.left = newNode
}
}else{
insertNode(node.right, newNode)
if(node.right == null) {
node.right = newNode
}
}
}
return null
}
首先由根节点8动身,进入node的key为8的栈内1比根节点8要小,进入递归,即进入到了node的key为3的栈内,以下所示:
3
-----------------
8
--------------------------
当前的值比3小再进入3的左孩子null的栈内
null
------------
3
-----------------
8
--------------------------
因为null的栈内,node为null,马上退出当前栈,返回至node的key为3的栈,发明左孩子为null,则将key为1的node变成key为3的node的左孩子,同时退出3的栈,返回至8的栈,8的栈左孩子不null,不做任何操纵,晓得当前要领实行终了,跳出8的栈,返回至要领地点的实行环境的栈,节点插进去终了,再举行下一个节点的插进去,操纵则同上。以上的诠释,假如配合上浏览器的断点调试,食用更佳,更好明白顺序的全部实行历程。
当一切节点插进去终了以后,该排序二叉树也建立终了。
二叉树建立终了以后则可对二叉树举行相干的操纵(遍历,查找,节点删除等)【待续】