struct BTree_node { char date; BTree_node* left, * right; int weight; void set(char c, BTree_node* l = NULL, BTree_node* r = NULL, int w = 0) { date = c; left = l; right = r; weight = 1; depth = 0; } int depth; };请给以上代码加上注释
时间: 2023-06-10 18:08:53 浏览: 68
// 定义二叉树结点结构体
struct BTree_node {
char date; // 结点数据
BTree_node* left, * right; // 左右子树指针
int weight; // 结点权值
int depth; // 结点深度
// 设置结点数据、左右子树和权值(默认值为0)
void set(char c, BTree_node* l = NULL, BTree_node* r = NULL, int w = 0) {
date = c;
left = l;
right = r;
weight = 1; // 初始化结点权值为1
depth = 0; // 初始化结点深度为0
}
};
相关问题
阅读完成下列程序,并回答问题 typedef struct bnode { ElemType data; struct bnode *left,*right; }btree; void f(btree *b) { btree *stack[MAXSIZE], *p; int top=0; p=b; do { while(__________(1)__________ ) { top++; stack[top]=p; p=p->left; } if(top>0) { __________(2)_________ ; top--; printf("%d ",p->data); p=p->right; } }while(p!=NULL || top!=0) } (1) _________________________ (2) _________________________ (3) 该程序的功能是什么?
该程序实现了二叉树的中序遍历,输出遍历结果。
(1) p!=NULL
这句代码表示当当前节点不为空时,一直向左遍历,将经过的节点指针入栈stack[]中。
(2) p=stack[top]
这句代码表示弹出栈顶元素,并将其指针赋值给p,输出该节点的数据值。然后将p指针指向其右子树,继续执行遍历。
(3) 注意程序中的一些变量定义:
- b为二叉树的根节点指针;
- MAXSIZE为定义的栈最大容量;
- stack[]为辅助栈,用于存储已经访问过的节点指针;
- p为当前遍历到的节点指针,top为栈顶指针;
- 该程序采用了循环的方式实现了二叉树的中序遍历,并结合栈的特性,遍历完左子树后再回溯到根节点,最后遍历右子树。
typedef struct fnode { char father[10]; char wife[10]; char son[10]; }FamType; typedef struct node { ElemType data; struct node* lchild, * rchild; }BTNode; typedef struct tnode { char name[10]; struct tnode* lchild, * rchild; }Btree; void PreOrder(BTNode* b) { {if (b != NULL) printf("%c", b->data); PreOrder(b->lchild); PreOrder(b->rchild); } } Btree* FindNode(BTree*b, char xml) { BTree* p; if (b == NULL) return (NULL); else { if (strcmp(b->name, xm) == 0 return (b); else { p = FindNode(b->1child, xm); if (p != NULL) return (p); else return (FindNode(b->rchild, xm)); } } }改错
代码中存在一些错误,下面是我找到的错误:
1. 第一个结构体的名称应该是 FamType 而不是 fnode。
2. 第二个结构体声明中的 ElemType 没有给出定义。
3. PreOrder 函数中缺少了一个右括号。
4. FindNode 函数中的参数 BTree 应该是 Btree。
5. FindNode 函数中的参数 xml 在函数体中被误写成了 xm。
6. FindNode 函数中的第四个 if 语句缺少右括号。
下面是改错后的代码:
```
typedef struct FamType {
char father[10];
char wife[10];
char son[10];
} FamType;
typedef struct BTNode {
char data;
struct BTNode* lchild, * rchild;
} BTNode;
typedef struct Btree {
char name[10];
struct Btree* lchild, * rchild;
} Btree;
void PreOrder(BTNode* b) {
if (b != NULL) {
printf("%c", b->data);
PreOrder(b->lchild);
PreOrder(b->rchild);
}
}
Btree* FindNode(Btree* b, char name) {
Btree* p;
if (b == NULL)
return (NULL);
else {
if (strcmp(b->name, name) == 0)
return (b);
else {
p = FindNode(b->lchild, name);
if (p != NULL)
return (p);
else
return (FindNode(b->rchild, name));
}
}
}
```
阅读全文