二叉树
二叉树是典型的树状结构,最顶部的节点称为根节点
,普通的节点一般称为子节点
或者父节点
,最底层的节点称为叶子节点
,
特点
每个节点最多只有两个子节点,
根据遍历节点的顺序不同分为:先序遍历
、中序遍历
、后续遍历
- 先看最简单的二叉树是怎么遍历的
先序遍历从父节点开始,然后访问左节点,最后访问右节点
中序遍历先从左节点开始,然后访问根节点,最后访问右节点
后续遍历先从左节点开始,然后访问右节点,最后访问根节点
- 再看看复杂的情况下怎么遍历的
复杂的二叉树遍历可以将整个二叉树分割成多个基础的二叉树
先序遍历:ABDEHCFIG
中序遍历:DBHEAFICG
后序遍历:DHEBIFGCA
方法
方法 | 描述 |
---|---|
insert | 插入 |
midOrder | 中序遍历 |
preOrder | 先序遍历 |
afteOrder | 后续遍历 |
find | 查找特定值 |
findMim | 查找最小值 |
findMax | 查找最大值 |
实现
class Node {
constructor(element, left, right){
this.element = element;
this.left = left;
this.right = right;
}
show(){
return this.element;
}
}
class BST {
constructor(){
this.root = null;
}
insert(element){
let node = new Node(element, null, null);
if (this.root == null) {
this.root = node;
}else{
let currNode = this.root;
let parent;
while(true){
if (currNode.element > element) {
currNode = currNode.left;
if (currNode.left == null) {
currNode.left = node;
break;
}
}else{
currNode = currNode.right;
if (currNode.right == null) {
currNode.right = node;
break;
}
}
}
}
}
// 中序遍历
midOrder(node){
if (node != null) {
this,midOrder(node.left);
node.show();
this.midOrder(node.right);
}
}
// 先序遍历
preOrder(){
if (node != null) {
node.show();
this,preOrder(node.left);
this.preOrder(node.right);
}
}
// 后序遍历
afteOrder(){
if (node != null) {
this,afteOrder(node.left);
this.afteOrder(node.right);
node.show();
}
}
// 寻找最小值
findMim(){
let currNode = this.root;
while (currNode.left != null) {
currNode = currNode.left;
}
return currNode.element;
}
// 寻找最大值
findMax(){
let currNode = this.root;
while (currNode.right != null) {
currNode = currNode.right;
}
return currNode.element;
}
// 寻找给定值
find(element){
let currNode = this.root;
while(currNode != null){
if (currNode.element < element) {
currNode = currNode.left;
}else if(currNode.element > element){
currNode = currNode.right;
}else{
return currNode;
}
}
}
}