Aug*_*lez 3 javascript binary-tree binary-search-tree
我正在尝试控制台二叉树中的每个数据。我的主要问题是我想以递归方式实现。到目前为止我基本上有这个代码:
this.levelOrder = function (root) {
if (root.data != null) {
console.log(root.data);
if (root.left != null) {
this.levelOrder(root.left);
}
if (root.right != null) {
this.levelOrder(root.right)
}
} else {
return;
}
};
Run Code Online (Sandbox Code Playgroud)
输出是3 2 1 5 4 7
但应该是3 2 5 1 4 7。所以基本上我正在访问节点的第一个子节点,而不是首先打印所有子节点。
假设有一棵这样的树,
4
2 6
1 3 5 7
Run Code Online (Sandbox Code Playgroud)
和一个对象字面量
tree = {
data: 4,
left: {
data: 2,
left: {
data: 1,
left: null,
right: null
},
right: {
data: 3,
left: null,
right: null
}
},
right: {
data: 6,
left: {
data: 5,
left: null,
right: null
},
right: {
data: 7,
left: null,
right: null
}
}
};
Run Code Online (Sandbox Code Playgroud)
您可以递归调用该函数,首先获取树的左侧部分,然后获取树的右侧部分。该算法称为深度优先搜索。
该函数使用单次检查,因为这足以首先检查然后继续。
4
2 6
1 3 5 7
Run Code Online (Sandbox Code Playgroud)
对于广度优先搜索(一种首先迭代树的每个级别的算法),您可以将此代码与上面相同的树数据一起使用。
tree = {
data: 4,
left: {
data: 2,
left: {
data: 1,
left: null,
right: null
},
right: {
data: 3,
left: null,
right: null
}
},
right: {
data: 6,
left: {
data: 5,
left: null,
right: null
},
right: {
data: 7,
left: null,
right: null
}
}
};
Run Code Online (Sandbox Code Playgroud)