JS二叉树的遍历(前序,中序,后序)

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JavaScript和树 1</title>
<link rel="stylesheet" type="text/css" href="css/task_2_22.css">
<style>
#wrapper {
  display: flex;
  flex-direction: row;
  padding: 15px 10px;
  margin: 5px;
  border: 1px solid #000;
  background-color: #fff;
  width: 730px;
  height: 240px; }


.layer_1 {
  display: flex;
  flex-direction: row;
  padding: 15px 10px;
  margin: 5px;
  border: 1px solid #000;
  background-color: #fff;
  width: 340px;
  height: 200px; }


.layer_2 {
  display: flex;
  flex-direction: row;
  padding: 15px 10px;
  margin: 5px;
  border: 1px solid #000;
  background-color: #fff;
  width: 135px;
  height: 160px; }


.layer_3 {
  display: flex;
  flex-direction: row;
  padding: 15px 10px;
  margin: 5px;
  border: 1px solid #000;
  background-color: #fff;
  width: 52.5px;
  height: 120px; }


/*# sourceMappingURL=task_2_22.css.map */
</style>
</head>
<body>
<div id="wrapper">
<div class="layer_1">
<div class="layer_2">
<div class="layer_3"></div>
<div class="layer_3"></div>
</div>
<div class="layer_2">
<div class="layer_3"></div>
<div class="layer_3"></div>
</div>
</div>
<div class="layer_1">
<div class="layer_2">
<div class="layer_3"></div>
<div class="layer_3"></div>
</div>
<div class="layer_2">
<div class="layer_3"></div>
<div class="layer_3"></div>
</div>
</div>
</div>
<input type="button" id="preOrder" value="前序遍历">
<input type="button" id="midOrder" value="中序遍历">
<input type="button" id="postOrder" value="后序遍历">
<a href="http://www.hhsapce.cn">点击返回个人主页</a>


<script type="text/javascript">
var result = [];//用于存放遍历的dom节点
var timer = null;//定义动画定时器


window.onload = function(){
var headNode = document.getElementById("wrapper");
//为前序遍历按钮绑定事件
document.getElementById("preOrder").onclick = function(){
//环境初始化
// styleReset();
// clearInterval(timer);
result = [];


preOrder(headNode);
startAnimate();
}
//为中序遍历按钮绑定事件
document.getElementById("midOrder").onclick = function(){
//环境初始化
// styleReset();
// clearInterval(timer);
result = [];


inOrder(headNode);
startAnimate();
}
//为后序遍历按钮绑定事件
document.getElementById("postOrder").onclick = function(){
//环境初始化
// styleReset();
// clearInterval(timer);
result = [];


postOrder(headNode);
startAnimate();
}
}
/*
*使用递归的方式前序遍历DOM
* //递归方式,先序遍历先访问根节点,然后以同样的方式访问左子树和右子树
*/


function preOrder(node){
result.push(node);
if(node.firstElementChild !== null){
preOrder(node.firstElementChild);
}
if(node.lastElementChild !== null){
preOrder(node.lastElementChild);
}
}
/*
*使用递归的方式中序遍历DOM
* 中序遍历先访问左子树,再访问根节点,最后访问右子树
*/


function inOrder(node){
if(node.firstElementChild !== null){
inOrder(node.firstElementChild);
}
result.push(node);
if(node.lastElementChild !== null){
inOrder(node.lastElementChild);
}
}
/*
*使用递归的方式后续遍历DOM
* 后序遍历先访问左子树,再访问右子树,最后访问根节点
*/


function postOrder(node){
if(node.firstElementChild !== null){
postOrder(node.firstElementChild);
}
if(node.lastElementChild !== null){
postOrder(node.lastElementChild);
}
result.push(node);
}
//动画开启函数,每隔一秒
function startAnimate(){
var i = 0;
result[i].style.backgroundColor = 'blue';
timer = setInterval(function(){
i++;
if(i < result.length){
result[i-1].style.backgroundColor = '#fff';
result[i].style.backgroundColor = 'blue';
}else{
clearInterval(timer);
result[result.length-1].style.backgroundColor = '#fff';
}
}, 1000)
}
//样式初始化函数
function styleReset(){
var divEles = document.getElementsByTagName("div");
for(var i=0; i<divEles.length;i++){
divEles[i].style.backgroundColor = '#fff';
}
}
</script>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值