source里面看,需要打断点
中序遍历的顺序就是: 每次遍历一个节点时,先获取左子节点的值,再读取当前节点的值,最后是右子节点;
因为左右子节点可能还有子元素,所以要递归调用“inOrderTraverseNode”这个方法,获取子元素的值;“callback”方法则是将获取到的值传递到外部;
HBuilder
//中序时应该打出来的是node的key 本来是应该打出4 的却把整个node打印出来了. //说明在最后一个(node.left && node.right)同时存在判断中 赋值出现错误 //本应该是 let aux = findMinNode(node.right); node.key = aux.key; ... // 写成了 let aux = findMinNode(node.right); node = aux.key; ... //因为本身Object是引用类型数据. 所以node(4) 的left right就都是null { key:8 left:{ key: { //错误位置 ,本来应该是Number(4), 现在变成Node(4)了 key:4, left:..., right:... }, left:..., right:... } right:{ key:10, left:..., right:... } }
第一 判断是否等于null 用=== 不是 ==
第二node.left = newNode.key;不对 是node.left = newNode;
同理right也是
并非完全复制,具体内容是调整了一下顺序,前序:abc,中序:bac,后续:bca
先理解执行栈和递归可能会好一点
谢谢哈,我试试
key表示的是节点node的值,比如根节点的值8,叶子节点的值4,7,13等
取数组的第一个值作为根节点,然后后面的值都是首先和这个根节点进行对比。
没问题聪明啊
要把最终结果返回去,不然递归完就没有结果了
newNode
这是先序输出了
https://github.com/beat-the-buzzer/binary-tree.git 我自己按照老师的课程写的,顺便还用ES6重构了
百度看看
=== 是类型都要对等 ,==可以帮你做转化的,不一样
插入算法的复杂度是:n*lg(n),插入操作类似二分法,复杂度是lg(n)
左子树最大 和 右子树最小都是可以的。
因为要替换的当前节点必须比其所有左子树的节点值要大,同时还要比其右子数所有节点值要小,所以只能找右子数的最小节点。
https://www.processon.com/这个官网,你可以直接搜在线画图工具,第一个就是.ProcessOn
尽信书不如无书,重要的是知道原理,理论到手,代码都是浮云。
找到问题了
背景图 需要设置背景的元素有宽高才行
不按顺序具体指的是什么?描述清楚一点。