最近在写百度前端技术学院的作业,写到第22题二叉树遍历,题目要求:
http://ife.baidu.com/task/det...
我写的demo:
https://yisha0307.github.io/I...
html代码:
https://github.com/yisha0307/...
js代码:
https://github.com/yisha0307/...
我遇到的问题是:我的前序没有问题,但是中序和后序出现了bug,没法做动画,但是我的前序、中序、后序的代码几乎一致,我实在看不出来有啥不对的地方啊,还请高人指点一二:
贴一段我的代码(更详细的可以看我上面贴的地址,但我觉得是这个inOrder和postOrder不知哪里出了bug):
var preOrder = function(node){
if(node !== null){
nodeArr.push(node);
preOrder(node.firstElementChild);
preOrder(node.lastElementChild);
}
render(nodeArr);
};
var inOrder = function(node){
if(node !== null){
inOrder(node.firstElementChild);
nodeArr.push(node);
inOrder(node.lastElementChild);
}
render(nodeArr);
};
var postOrder = function(node){
if(node !== null){
postOrder(node.firstElementChild);
postOrder(node.lastElementChild);
nodeArr.push(node);
}
render(nodeArr);
};
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
代码看着没毛病,建议题主利用console单步调试一下就知道了!
其实主要在于,render方法的执行问题,inOrder在遍历的时候一直递归到最左子树的时候,最左节点的
firstElementChild是null,然后inOrder(null),结果就是if判断跳过直接就render([]),此时nodeArr根本就没有元素在里面,因为你还在递归第一个inOrder还没到push的情况。同样postOrder也是这个道理!
根据你这个代码来看,最简单的就是把render抽出来,放到点击回调执行完遍历得到nodeArr之后,再调用