JS二叉树前序、中序、后序、层序遍历算法

一、二叉树的定义

二叉树是另一种树型结构,它的特点是每一个节点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。

二、先序遍历、中序遍历、后序遍历、层序遍历操作定义

1、先序遍历操作定义

若二叉树为空,则空操作;否则

  • 访问根节点
  • 先序遍历左子树
  • 先序遍历右子树

2、中序遍历操作定义

若二叉树为空,则空操作;否则

  • 中序遍历左子树
  • 访问根节点
  • 中序遍历右子树

3、后序遍历操作定义

若二叉树为空,则空操作;否则

  • 后序遍历左子树
  • 后序遍历右子树
  • 访问根节点

4、层序遍历操作定义

若二叉树为空,则空操作;否则

  • 遍历位于同一层的相关数据
  • 进入二叉树的下一层
  • 再次遍历处于同一层的数据直到将二叉树遍历完成

三、算法描述

前序遍历:

function getListFrontDLR(obj) {
	console.log(obj.val);
	if(obj.left) {
		getListFrontDLR(obj.left);
	}
	if(obj.right) {
		getListFrontDLR(obj.right);
	}
}

中序遍历

function getListMiddleDLR(obj) {
	if(obj.left) {
		getListMiddleDLR(obj);
	}
	console.log(obj.val);
	if(obj.right) {
		getListMiddleDLR(obj);
	}
}

后序遍历

function getListBehindDLR(obj) {
	if(obj.left) {
		getListBehindDLR(obj);
	}
	if(obj.right) {
		getListBehindDLR(obj);
	}
	console.log(obj.val);
}

层序遍历

// 注意:arr为其相关的数组对象(该函数的存储过程类似于队列)
function getListLevelDLR(arr) {
	// 存放层序遍历的结果
	let res = [];
	// 依次存放数组对象中统一层次的数据
	let tempArr = [];
	tempArr = arr.slice(0);
	// 通过该层次的相关的数据长度进行遍历
	while(tempArr.length) {
		// 依次相关层次进行遍历
		for(let i=0; i<tempArr.length;i++) {
			// 去除其同一层次上的同一个数据,同时删除掉该同一层次上的相关数据
			let temp = tempArr.shift();
			// 获取到该层次上所去除的数据的相关值
			res.push(temp.name);
			if(temp.children) {
				for(let j=0; j<temp.children.length; j++) {
					tempArr.push(temp.children[j]);
				}
			}
		}
	}
	return res;
}

注意:前序、中序和后序遍历算法与层序遍历所存放二叉树的数据结构不同,前序、中序和后序遍历算法是使用对象进行存放二叉树的数据的,而层序遍历是使用数组对象存放二叉树的数据的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值