【发布时间】:2010-11-22 02:29:36
【问题描述】:
这是节点定义:
struct node{
int data;
stuct node * left;
struct node * right;
};
我要做的是列出所有指向祖先节点的节点。在发布了错误的解决方案并从答案中获取建议后,我的新解决方案是:
递归遍历二叉树。将当前节点添加到节点数组中,然后检查当前节点的子节点是否指向任何先前的祖先节点。
默认情况是节点为 NULL。如果发生这种情况,函数将返回。
它应该如何工作:
将节点添加到数组中
检查左孩子是否为NULL。
如果不是,它将子节点与之前的每个节点进行比较。
如果发现故障,它会报告它。
如果不是,它以子作为参数调用函数。
重复直到完成。 (对于二叉树的 rhs 也一样)
问题:
- 数组是最好存储的东西吗 节点?
- 这行得通吗? for (i = 0; i
- 因为函数是递归的, 数组和数组索引不能 在函数内部初始化 (或者他们可以吗?)他们应该是 全球?
- 有两个阵列会更好吗? (一个用于 LHS,一个用于 右轴)
代码:
void findFault(node * root){
if (root == NULL){
return;
}
arrOfNodes[index++] == root; // array of nodes
if (root->left != NULL){
for (i = 0; i < sizeof(arrOfNodes) / sizeof(node); i++){
if (ar[i] == root->left){
printf("%d", root->left);
return;
}
}
findFault(root->left);
} else return;
if (root->right != NULL){
for (i = 0; i < sizeof(ar) / sizeof(node); i++){
if (ar[i] == root->right){
printf("%d", root->right);
return;
}
}
findFault(root->right);
} else return;
}
【问题讨论】:
-
我已经更新了问题并且我的解决方案已经完全改变了。顺便尽量不使用c++标准库。
标签: c++ c binary-tree