首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >二叉树的递归算法

二叉树的递归算法

作者头像
超超不会飞
发布2020-09-18 10:08:05
发布2020-09-18 10:08:05
4720
举报
文章被收录于专栏:超超不会飞超超不会飞

二叉树

二叉树是一种特殊的数据结构,有一个根节点,根节点下面有一左一右两个子节点,每个子节点又有各自的子节点,层层深入成树状。

二叉树的遍历

关于二叉树的遍历我只学习了递归遍历,非递归遍历比较复杂还是很理解。

递归遍历分为先序,中序和后序。用三个字母表示递归遍历可以很好理解:

D: 访问根节点,L: 遍历根节点的左子树,R:遍历根节点的右子树。

先序遍历:DLR

中序遍历:LDR

后序遍历:LRD

先序遍历的递归算法
代码语言:javascript
复制
function preOrder(node) {
	if (node) {
		console.log(node.value);
		preOrder(node.left);
		preOrder(node.right);
	}
}
中序遍历的递归算法
代码语言:javascript
复制
function inOrder(node) {
	if (node) {
		inOrder(node.left);
		console.log(node.value);
		inOrder(node.left);
	}
}
后序遍历的递归算法
代码语言:javascript
复制
function postOrder(node) {
	if (node) {
		postOrder(node.left);
		postOrder(node.right);
		console.log(node.value);
	}
}

更详细的二叉树算法可以查看这篇文章

定时问题

遇到的一个难题是如何实现间隔一段时间(500ms)改变节点的颜色,这就需要用到setTimeout()这个方法。刚开始的想法是把定时函数写进递归函数里面,让每次递归都执行setTimeout(),但是这个方法行不通,会改变每个节点出现的顺序,而且函数执行结束的时间小于定时时间,导致想要达到的效果一瞬间全部执行完毕,而不是按规定的时间一个一个出现,这个理解可能有点错误,但是没办法达到想要的效果,所以放弃。

我的方法是把遍历出来的值放进数组里,然后再用数组完成想要做的各种操作。

代码语言:javascript
复制
function preOrder(node) {
	if (node) {
		preOrder(node.left);
		preOrder(node.right);
		preList.push(node.value);
	}
}

for (let i = 0; i < preList.length; i++) {
	setTimeout(function() {
		console.log(preList[i]);  // 这样就可以按顺序每隔一段时间打印出一个数字
	}, 500 * i);
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-04-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二叉树
    • 二叉树的遍历
      • 先序遍历的递归算法
      • 中序遍历的递归算法
      • 后序遍历的递归算法
    • 定时问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档