JavaScript实现二叉树的遍历(层次,前,中,后)

JavaScript实现二叉树的遍历(层次,前,中,后)

废话不多说,直接上代码

<script>
    //节点
function Node(element, left, right,parents)	{
	this.element = element;
	this.left = left;
	this.right = right;
	this.parents = parents;
	this.show = function() {
		return this.element;
	}
}
 
//创建二叉树
function BST() {
	this.root = null;
 
	//插入节点
	this.insert = function(element){
        // 创建新的节点
		let node = new Node(element, null, null);
        // 判断根节点是否为空,如果为空,那只有node一个节点,也是根节点
		if(this.root === null) this.root = node;
		else {
            // 如果存在根节点,先将根节点赋值给buffer存起来
			let buffer = this.root;
			while(true) {
                // 判断创建的节点的值大于根节点的值-------<2>
				if(node.element > buffer.element) {
                    // 如果根节点的右孩子不存在
					if(buffer.right === null) {
                        // 将新创建的节点赋值给右节点
						buffer.right = node;
                        // 根节点就是其右节点的父节点
						node.parents = buffer;
						break;
					} else {
						// 如果根节点的右孩子不为空,将有孩子作为根节点,继续执行<2>
						buffer = buffer.right;
					}
				}
				// 判断创建的节点的值小于等于根节点的值-------<3>
				if(node.element <= buffer.element) {
					// 判断根节点的左孩子是否为空,如果为空
					if(buffer.left === null) {
						// 将新节点赋值给左孩子
						buffer.left = node;
						// 根节点是左孩子的父亲
						node.parents = buffer;
						break;
					} else {
						// 如果左孩子不为空,那么就将左孩子看成父节点,继续执行<3>
						buffer = buffer.left;
					}
				}
			}
		}
	}
 
	//先序遍历
	this.preOrederTraversal = function(node) {
		if(node === null) return;
		else {
			// 根左右
			console.log(node.show()); 
			this.preOrederTraversal(node.left);
			this.preOrederTraversal(node.right);
		}
	}
 
	//中序遍历
	this.inOrederTraversal = function(node) {
		//console.log(node.element);左根右
		if(node === null) return;
		else {
			this.inOrederTraversal(node.left);
			console.log(node.show());
			this.inOrederTraversal(node.right);
		}
	}
 
	//后序遍历
	this.postOrederTraversal = function(node) {
		// 左右根
		if(node === null) return;
		else {
			this.postOrederTraversal(node.left);
			this.postOrederTraversal(node.right);
			console.log(node.show());
		}
	}
	this.leveltraversal=function(node){
		// 从上到下,从左到右
		if(node === null) return;
		var checkArr = [node];
		// 将节点放在checkArr里
		console.log(checkArr)
		while (checkArr.length > 0) {
			var newCheckArr = [];
			// 用来存储遍历后的节点
			for (var i = 0; i < checkArr.length; i++) {
				var item = checkArr[i];
				console.log(item.element);
				item.left && newCheckArr.push(item.left);   
				item.right && newCheckArr.push(item.right); 
			}
			checkArr = newCheckArr;
		}
		
	}
}
 
let bst = new BST();
bst.insert(23);
bst.insert(45);
bst.insert(16);
bst.insert(3);
bst.insert(99);
bst.insert(22);
console.log(bst.root)
console.log("先序遍历----------------")
bst.preOrederTraversal(bst.root); //23 16 3 22 45 99)//先序遍历
console.log("层次遍历----------------")
bst.leveltraversal(bst.root); // 23 16 45 3 22 99//层次遍历
console.log("中序遍历----------------")
bst.inOrederTraversal(bst.root);  // 3 16 22 23 45 99//中序遍历
console.log("后序遍历----------------")
bst.postOrederTraversal(bst.root); //3 22 16 99 45 23//后序遍历

</script>

提示

在创建二叉树的函数中,一定要进行调试,不然无法理解标记的注释,当然这也是我的理解和借鉴大佬的代码

层次遍历
二叉树的创建的遍历

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值