代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>二叉树</title>
</head>
<body>
<script>
function BinaryTree(){
var Node = function (key){
this.key = key;
this.left = null;
this.right = null;
};
var root= null;
var insetNode = function(node,newNode){
if (newNode.key < node.key) {
if (node.left === null) {
node.left = newNode;
} else {
insetNode(node.left,newNode);
}
} else{
if (node.right ===null) {
node.right = newNode;
} else{
insetNode(node.right,newNode);
}
}
}
this.insert = function(key){
var newNode = new Node(key);
if (root === null) {
root = newNode;
} else {
insetNode(root,newNode);
}
};
var inOrderTraverseNode = function(node,callback){
if (node !== null) {
inOrderTraverseNode(node.left,callback);
callback(node.key);
inOrderTraverseNode(node.right,callback);
}
}
this.inOrderTraverse = function(callback){
inOrderTraverseNode(root,callback);
}
}
var nodes = [8,3,10,1,6,14,4,7,13,13];
var binaryTree = new BinaryTree();
nodes.forEach(function(key){
binaryTree.insert(key);
});
var callback = function(key){
console.log(key);
}
binaryTree.inOrderTraverse(callback);
</script>
</body>
</html>
代码内容为二叉树的中序遍历。
在调试代码的时候,断点设到44行,然后点击6次按步执行代码后,此时node
为null
,即key=1
节点的左孩子,因为不满足node !== null
的条件,所以大括号内代码没有执行,跳到了49行,到此为止都明白,但是再按步执行一次就跳到回46行了,不解,这是怎么实现的?求指教~谢谢!
树结构如下图:
因为中序遍历先遍历左侧的节点,遍历完后会执行操作,再遍历右侧节点。
你观察到 node 为 null 时,相当于 1 左侧的节点已经遍历完了,也就是
inOrderTraverseNode(node.left,callback)
这行代码已经执行完毕。所以会执行下一行,也就是callback(node.key);
。