一、二叉树
二叉树(binary tree)是指树中节点的度不大于2的有序树,其节点有左右子树之分。
满二叉树:如果一棵二叉树只有度为0的节点和度为2的节点,并且度为0的节点在同一层上,则这棵二叉树为满二叉树。
完全二叉树:叶子节点只能出现在最下层和次下层,且最下层的叶子节点集中在树的左部。
二、二叉树的生成
function NodeTree (value) {
this.value = value;
this.left = null;
this.right = null;
}
let root = new NodeTree('A');
let t1 = new NodeTree('B');
let t2 = new NodeTree('C');
let t3 = new NodeTree('D');
let t4 = new NodeTree('E');
let t5 = new NodeTree('F');
root.left = t1;
root.right = t2;
t1.left = t3;
t1.right = t4;
t2.left = t5;
console.log(root);
生成的二叉树如下:
三、二叉树的遍历
1、前序遍历
前序遍历就是先遍历根节点,再遍历左子树,最后遍历右子树,即 根—>左—>右
代码如下:
/**
* 前序遍历
* @param {NodeTree} root
*/
let formerSequenceTraversal = function (root) {
if (!root || root.value === null) {
return null;
}
console.log(root.value);
formerSequenceTraversal(root.left);
formerSequenceTraversal(root.right);
}
输出结果如下:
A、B、D、E、C、F
2、中序遍历
中序遍历就是先遍历左子树,再遍历根节点,最后遍历右子树,即 左—>根—>右
代码如下:
/**
* 中序遍历
* @param {NodeTree} root
*/
let middleSequenceTraversal = function (root) {
if (!root || root.value === null) {
return null;
}
middleSequenceTraversal(root.left);
console.log(root.value);
middleSequenceTraversal(root.right);
}
输出结果如下:
D、B、E、A、F、C
3、后序遍历
后序遍历就是先遍历左子树,再遍历右子树,最后遍历根节点,即 左—>右—>根
代码如下:
/**
* 后序遍历
* @param {NodeTree} root
*/
let afterSequenceTraversal = function (root) {
if (!root || root.value === null) {
return null;
}
afterSequenceTraversal(root.left);
afterSequenceTraversal(root.right);
console.log(root.value);
}
输出结果如下:
D、E、B、F、C、A