【发布时间】:2011-05-25 13:25:55
【问题描述】:
给定下图所示的二叉树,假设调用函数 A(root),确定访问下图所示二叉树节点的顺序。假设树节点和指针的定义如图所示。假设 root 是指向包含 60 的节点的指针。 我对这个问题的回答如下。这是正确的吗?我做错了什么?
60
/ \
30 90
/ \ /
5 38 77
\ / / \
8 32 62 88
struct treeNode{
int data;
struct treeNode *left, *right:
{
struct treeNode *tree_ptr;
void A(struct treeNode *node_ptr){
if (node_ptr != NULL){
printf(“%d ,”,node_ptr->data);
B(node_ptr->left);
B(node_ptr->right);
}
}
void B(struct treeNode *node_ptr){
if (node_ptr != NULL) {
A(node_ptr->left);
printf(“%d ,”,node_ptr->data);
A(node_ptr->right);
}
}
答案: 在 void A 它说首先打印 node_ptr-> data 所以 60 被打印 然后函数调用 B(node_ptr->left) 然后在 B 内,A 被调用 (node_ptr->left) 然后你打印那个数据是 5。然后 A(node_ptr->right) 被调用回到 A,打印该数据,以便打印 8。现在我不太确定下一步该做什么,但从逻辑上讲,打印 30 是有意义的,但我不确定 ptr 如何从 8 变为 30。然后如果你继续以相同的模式打印 38 并打印 32。 对于右子树... 90 77 62 88
【问题讨论】:
-
你应该把它标记为
homework。 -
AFAIK
homework标签已被劝阻。 -
给出的代码无法编译。你到底是什么意思?
-
@Vivin 也许,但如果一个问题被诚实地标记为这样,我更有可能适当地改变我的答案。
-
@nmichaels 基本上是提供的代码,因此决定了打印出元素的顺序。我只是想验证一下我是否正确
标签: c algorithm data-structures binary-search-tree