void CreatTree(TNode* &root) //递归法先序创建树 { char ndata; cin>>ndata; if(ndata=='#') root=NULL; else { root=new TNode;root->data=ndata; CreatTree(root->lchild); CreatTree(root->rchild); } } void preOrderTraver(TNode*& root) //递归法先序遍历 { if(root!=NULL) { cout<<root->data<<" "; preOrderTraver(root->lchild); preOrderTraver(root->rchild); } }
时间: 2024-04-07 22:29:24 浏览: 173
这是一个二叉树的创建和遍历的代码。其中,CreatTree函数用于递归地创建二叉树,preOrderTraver函数用于递归地进行先序遍历。
具体来说,CreatTree函数接收一个指向TNode类型的指针root的引用,表示要创建的二叉树的根节点。函数首先读入一个字符ndata,如果该字符为'#',表示当前节点为空,将root置为NULL;否则,创建一个新的节点,将其数据域设置为ndata,并递归地创建左子树和右子树。
preOrderTraver函数同样接收一个指向TNode类型的指针root的引用,表示要遍历的二叉树的根节点。函数首先输出当前节点的数据域,然后递归地遍历左子树和右子树,直到遍历完整棵树。
这两个函数结合起来,可以用于创建一个二叉树,并进行先序遍历。
相关问题
#include <iostream> #include <cstdio> #include<stdlib.h> using namespace std; typedef char Datatype; int cnt; struct TNode { Datatype data; TNode* rchild; TNode* lchild; }; void CreatTree(TNode* &root) //递归法先序创建树 { char ndata; cin>>ndata; if(ndata=='#') root=NULL; else { root=new TNode;root->data=ndata; CreatTree(root->lchild); CreatTree(root->rchild); } } void preOrderTraver(TNode*& root) //递归法先序遍历 { if(root!=NULL) { cout<<root->data<<" "; preOrderTraver(root->lchild); preOrderTraver(root->rchild); } } void InOrderTraver(TNode*& root) //递归法中序遍历 { if(root!=NULL) { InOrderTraver(root->lchild); cout<<root->data<<" "; InOrderTraver(root->rchild); } } void posOrderTraver(TNode*& root)//递归法后序遍历 { if(root!=NULL) { posOrderTraver(root->lchild); posOrderTraver(root->rchild); cout<<root->data<<" "; } } int BTHeight(TNode *t)//计算二叉树的深度 { int ans = 0; if(t == NULL) return 0; else if(t != NULL) ans += max(ans,max(BTHeight(t->lchild),BTHeight(t->rchild))+1); return ans; } int BTLeafNode(TNode *t)//计算二叉树的叶子节点数 { if(t != NULL) { if(t->lchild == NULL && t->rchild == NULL) { printf("%c",t->data); cnt++; } else { BTLeafNode(t->lchild); BTLeafNode(t->rchild); } } return cnt; } int main() { TNode *root=NULL; cout<<"请输入该二叉树的先序遍历结果:\n"; CreatTree(root); cout<<"先序遍历结果"<<endl; preOrderTraver(root);cout<<endl; cout<<"中序遍历结果:"<<endl; InOrderTraver(root);cout<<endl; cout<<"后序遍历结果:"<<endl; posOrderTraver(root);cout<<endl; printf("\n输出二叉树的深度:"); int sum = BTHeight(root); cout << sum << endl; printf("输出二叉树的叶子结点:"); int ans = BTLeafNode(root); printf("\n输出二叉树的叶子结点的个数:"); cout << ans << endl; system(“pause”); return 0; }每一段有什么作用
这段代码是一个二叉树的创建和遍历程序,具体分为以下几部分:
1. 定义了二叉树的节点结构体 TNode,其中包括节点的数据和左右子树指针。
2. 定义了一个函数 CreatTree,用于递归创建二叉树。
3. 定义了三个遍历函数:preOrderTraver、InOrderTraver、posOrderTraver,分别实现二叉树的先序、中序和后序遍历。
4. 定义了一个函数 BTHeight,用于计算二叉树的深度。
5. 定义了一个函数 BTLeafNode,用于计算二叉树的叶子节点数。
6. 在主函数中,先调用 CreatTree 函数创建二叉树,然后分别调用三个遍历函数输出遍历结果。接着调用 BTHeight 和 BTLeafNode 函数计算二叉树的深度和叶子节点数,并输出结果。
注意,本段代码中存在一些错误,如 system("pause") 语句应该使用双引号,而不是中文引号。此外,BTHeight 函数中的 ans 变量没有被正确初始化,可能会导致计算结果错误。
#include <stdio.h> #include <stdlib.h> #define LEN sizeof(tree) typedef struct BiTNode { int data; struct BiTNode* lchild; struct BiTNode* rchild; } tree; void CreatTree(tree** root) { int t; scanf("%d", &t); if (t == 0) { *root = NULL; return; } else { *root = (tree*)malloc(LEN); (*root)->data = t; printf("\n输入%d的左孩子:", (*root)->data); CreatTree(&((*root)->lchild)); printf("输入%d的右孩子:", (*root)->data); CreatTree(&((*root)->rchild)); }}void ClearTree(tree** root) { if (*root == NULL) return; else { ClearTree(&((*root)->lchild)); ClearTree(&((*root)->rchild)); free(*root); *root = NULL; }}// 先序遍历 void preorder(tree* root) { if (root == NULL) return; else { printf("%d ", root->data); preorder(root->lchild); preorder(root->rchild); }}// 中序遍历 void inorder(tree* root) { if (root == NULL) return; else { inorder(root->lchild); printf("%d ", root->data); inorder(root->rchild); }}// 后序遍历 void postorder(tree* root) { if (root == NULL) return; else { postorder(root->lchild); postorder(root->rchild); printf("%d ", root->data); }}int main() { tree* root = NULL; printf("输入根节点:"); CreatTree(&root); printf("%d ", root->data); printf("先序遍历:"); preorder(root); printf("\n中序遍历:"); inorder(root); printf("\n后序遍历:"); postorder(root); ClearTree(&root); return 0;}用c语言编写
这段代码是一个二叉树的创建和遍历程序,使用了C语言的动态内存分配和递归实现遍历功能。
```c
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(tree)
typedef struct BiTNode {
int data;
struct BiTNode* lchild;
struct BiTNode* rchild;
} tree;
void CreatTree(tree** root) {
int t;
scanf("%d", &t);
if (t == 0) {
*root = NULL;
return;
}
else {
*root = (tree*)malloc(LEN);
(*root)->data = t;
printf("\n输入%d的左孩子:", (*root)->data);
CreatTree(&((*root)->lchild));
printf("输入%d的右孩子:", (*root)->data);
CreatTree(&((*root)->rchild));
}
}
void ClearTree(tree** root) {
if (*root == NULL)
return;
else {
ClearTree(&((*root)->lchild));
ClearTree(&((*root)->rchild));
free(*root);
*root = NULL;
}
}
// 先序遍历
void preorder(tree* root) {
if (root == NULL)
return;
else {
printf("%d ", root->data);
preorder(root->lchild);
preorder(root->rchild);
}
}
// 中序遍历
void inorder(tree* root) {
if (root == NULL)
return;
else {
inorder(root->lchild);
printf("%d ", root->data);
inorder(root->rchild);
}
}
// 后序遍历
void postorder(tree* root) {
if (root == NULL)
return;
else {
postorder(root->lchild);
postorder(root->rchild);
printf("%d ", root->data);
}
}
int main() {
tree* root = NULL;
printf("输入根节点:");
CreatTree(&root);
printf("%d ", root->data);
printf("先序遍历:");
preorder(root);
printf("\n中序遍历:");
inorder(root);
printf("\n后序遍历:");
postorder(root);
ClearTree(&root);
return 0;
}
```
阅读全文
相关推荐

