const { tree } = require("./utils/BinarySearchTree");
//非递归形式的中序遍历
//因为 console.log 会换行,不能将所有内容收集成一行。所以使用 str 来收集要打印的内容。
/**
* 进行
*/
let stack = [];
function InOrderDisplayByStack(root, str = "") {
if (root == undefined || root == null) {
return "";
}
while (root || stack.length) {
/**
* 如果 root 为 undefined, 且 stack 不为空,那么后继节点一定是已经入栈过的点。
* 对于入栈过的点,是不需要重新访问其左子树的。
*/
while (root) {
stack.push(root);
root = root.leftNode;
}
/**
* 判断 stack.length, 主要是树就只有一个节点的时候的情形。
*/
if (stack.length) {
root = stack.pop();
//中序访问。
str += `${root.value}, `;
//分两种情况,一种是 rightNode 为 undefine。一种是右子树。
root = root.rightNode;
}
}
return str;
}
let content = InOrderDisplayByStack(tree);
console.log(content.replace(/, $/, ""));
04-03
3312
06-08
422