我正在尝试实现递归方法,以递归方式设置每个节点的高度。实现了部分解决方案,但是我不能完全确定在哪里可以减小高度并检查特定节点的顺序遍历是否完整。我的程序基于此实现:http://visualgo.net/bst.html
谢谢
答案 0 :(得分:2)
如果你的高度在这里表示节点所在的树的级别,那么使用全局变量会给你带来非常奇怪的结果。我也承认不完全确定你对变量u
做了什么。
那就是说,我认为你应该对这样的事情没问题:
public void setHeight(struct node *r, int h = -1) {
// pointer pointing to null, return
if(r == NULL) {
return;
}
h++; // increment height
r.height = h; // set update height to a current node
setHeight(r ->u.lc, h); // traverse the list pointing to the left child
visit(r) // visit pointing node
setHeight(r ->u.rc, h); // visit right child of the node
}
编辑:我还没有发表评论的声誉,因此我仅限于使用修改进行回复。 @ProgLearner,你不需要一个单独的变量u
因为你的节点指针是一个函数参数,所以每次调用函数你都会有一个新的变量。同样,正如Jonathan Mee所说,h
变量不需要外部初始化,因为它也是函数的本地变量。如果您没有提供任何初始值(例如,当您在根上调用它时),它将默认为-1。