【发布时间】:2020-02-03 15:51:53
【问题描述】:
问题如下:
有没有一种算法,给定一棵二叉树T 和一个数组,允许在数组中存储对应的按顺序访问树的结果?
“正常”有序访问的伪代码:
inOrder(x){ // x is a node of a binary tree
if(x != NIL){ // the node is not null
inOrder(x.left)
print(x.key)
inOrder(x.right)
}
}
// Function calling inOrder
printInOrder(T){ // T is a binary tree
inOrder(T.root) // T.root is the root of the tree
}
示例: 给定以下树
5
/ \
3 8
/ \ /
2 7 1
上面的算法应该输出2 3 7 5 1 8。
我确信这是可以实现的,应该不会太难,但我目前正在为这个问题而苦苦挣扎。
【问题讨论】:
-
提示:跟踪数组中下一个元素应该写入的当前索引。如果您必须在没有数组以外的任何可变状态的情况下执行此操作,则将该索引作为参数并返回新的当前索引应该是什么。
-
我已经知道第一个解决方案,虽然我觉得它可以改进(我真的很不喜欢它)。关于第二个:如何确定下一个元素应该保存在哪里?在示例中,我使用了几乎完整的二叉树,但该算法应该适用于每棵树。
-
将变量(包括要填充输出的数组)作为参数传递给
inOrder函数是否有任何限制? -
您只需要将节点保存在数组中,而不是使用“print(x.key)”语句。取一个全局数组 "inorderNodes" 和一个全局 int 变量 "idx" 并从驱动方法中设置 "idx=0",写入 "inorderNodes[idx] = x.key; idx++;"就是这样。
-
inOrder参数没有限制
标签: algorithm binary-tree binary-search-tree inorder