source里面看,需要打断点
第一 判断是否等于null 用=== 不是 ==
第二node.left = newNode.key;不对 是node.left = newNode;
同理right也是
key表示的是节点node的值,比如根节点的值8,叶子节点的值4,7,13等
取数组的第一个值作为根节点,然后后面的值都是首先和这个根节点进行对比。
newNode
=== 是类型都要对等 ,==可以帮你做转化的,不一样
https://www.processon.com/这个官网,你可以直接搜在线画图工具,第一个就是.ProcessOn
尽信书不如无书,重要的是知道原理,理论到手,代码都是浮云。
找到问题了
不按顺序具体指的是什么?描述清楚一点。
看看是不是这的问题
找到原因了
你定义的Node类呢 老师的new Node(key) Node对象是自己写的 把你第二行 aa改为Node
找到问题了,right打错了...
老师写错了啊。把视频看完再提问题
function Bin() {
var Node = function (key) {
this.key = key;
this.left = null;
this.right = null;
};
var root = null;
var insertNode = function (node, newNode) {
if (newNode.key < node.key) {
if (node.key === null) { //此处node.key改为node.left
node.left = newNode;
} else {
insertNode(node.left, newNode);
}
} else {
if (node.right === null) {
node.right = newNode;
} else {
insertNode(node.right, newNode);
}
}
};
this.insert = function (key) {
var newNode = new Node(key);
if (root === null) {
root = newNode;
} else {
insertNode(root, newNode);
}
};
}
var nodes = [8, 3, 10, 1, 14, 7, 13];
var bin = new Bin();
nodes.forEach(function (key) {
bin.insert(key);
});
第二行构造函数要有形参key
第18行的else插入右节点,没有空判断
if(oldNode.right===null){ oldNode.right = newNode; } else { insertNode(oldNode.right, newNode); }
找到原因了
是this.insert = function(key)这里忘填key了
14行 this.right=null
应该是打错了
var arr=[1,2,3,4]才对
声明一个数组并存入1,2,3,4
知道了 里面用了递归,自己太粗心!
https://www.processon.com/
哈哈哈。真的是应该看完再问
这里涉及一个javascrip 闭包的概念,简单地说就是 函数外部是无法访问函数内部定义的变量的,学过java的话可以这么理解, insertNode为公开函数。函数外部可以通过new 出来的对象访问,而函数内部的定义的变量则无法访问:Node, insert为私有函数和变量。
this.insert这个接口应该是属于BinaryTree这个方法内的,且在判断节点有孩子的时候,递归调用时,传的是下一节点,而不是该节点。
怎么解决,你的代码能看下吗
数组 ,排序二叉树 平衡二叉树 ,存内存中