所以现在我实现了顺序遍历,并且需要打印节点所在的深度。因此,如果我的树是这样的:
5
/ \
2 9
\ /
3 7
然后在打印3时,其深度应为2。 如果递归调用深度,该在哪里增加?如果沿着树向上倾斜,该如何减小深度?
我的代码是
void post_order(BST* root,int level)
if(root == NULL){
return;
}
post_order(root -> left,level);
post_order(root -> right, level);
//Here I would print the node info and depth
}
我要问的是我将在哪里增加级别以显示适当的节点深度,为什么?
答案 0 :(得分:2)
无需增加/减少电平。当您进行递归调用时,只需传递一个比当前级别大一的值,当堆栈展开时,先前级别的级别仍将是递归调用之前的值。
当然,您在打印水准仪的位置将指示遍历树时看到的水准仪打印顺序。
void post_order(BST* root,int level)
if(root == NULL){
return;
}
post_order(root -> left,level + 1);
post_order(root -> right, level + 1);
//Here I would print the node info and depth
}
答案 1 :(得分:1)
level变量将帮助您跟踪深度。如果每次进行递归调用时都将当前级别+ 1的值传递给子级别,则将在每个节点上获得正确的深度。根据您希望根深度为1还是0,以根节点和para 2为0或1进行初始调用。
void post_order(BST* root,int level)
if(root == NULL){
return;
}
post_order(root -> left,level+1);
post_order(root -> right, level+1);
//print node info, depth = level
}