二叉树的建立与遍历
2020-04-07 12:27
106 查看
1:二叉树节点的定义
struct Node { int data; struct Node *pleft; struct Node *pright; }Node;
2:二叉树创建一个节点的函数,返回值是指向该节点的指针
struct Node *createnode(int value) { struct Node *pnode = (struct Node *)malloc(sizeof(struct Node)); pnode->data = value; pnode->pleft = pnode->pright = NULL; return pnode; }
3:二叉树插入节点
struct Node *addnode(int value, struct Node *pnode) { if(pnode == NULL) return createnode(value); if(value == pnode->data) { return pnode; } if(value < pnode->data) { if(pnode->pleft == NULL) { pnode->pleft = createnode(value); return pnode->pleft; } else { return addnode(value, pnode->pleft); } } else { if(pnode->pright == NULL) { pnode->pright = createnode(value); return pnode->pright; } else { return addnode(value, pnode->pright); } } }
4:二叉树的遍历(递归)
void listnodes(struct Node *pnode) { if(pnode != NULL) { listnodes(pnode->pleft); printf("%d\n", pnode->data); listnodes(pnode->pright); } }
5:求二叉树的深度(递归)
int Treeheight(struct Node *pnode) { int LD, RD; if(pnode == NULL) { return 0; } else { LD = Treeheight(pnode->pleft); RD = Treeheight(pnode->pright); return (LD >= RD? LD:RD) + 1; } }
6:主函数
int main(void) { int newvalue = 0; struct Node *proot = NULL; char answer = 'n'; do { printf("Enter the node value:\n"); scanf("%d", &newvalue); if(proot == NULL) { proot = createnode(newvalue); } else { addnode(newvalue, proot); } printf("\nDo you want to enter another (y or n)? "); scanf(" %c", &answer); } while(tolower(answer) == 'y'); listnodes(proot); printf("\nThe height of tree is %d!", Treeheight(proot)); return 0; }
相关文章推荐
- 二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树的建立和遍历(递归)
- 二叉树的简单建立,遍历和删除
- 二叉树建立与遍历递归操作c++实现
- Java实现二叉树建立以及三种遍历
- 二叉树的建立和递归遍历、非递归遍历操作
- 二叉树的建立与遍历详解 菜鸟都能看懂的教程
- 二叉树的建立与遍历
- 用Java实现建立链式二叉树存储数据,并对其进行遍历(前序,中序,后序),打印输出遍历结果。
- 二叉树非递归前序建立与后序遍历
- 二叉树的建立及遍历
- 二叉树的建立和遍历算法 --->树
- 数据结构实验之二叉树的建立与遍历
- 二叉树的建立以及先序,中序,后序遍历
- 二叉树的建立和遍历
- 二叉树建立 ---层次遍历方式
- 二叉树的层次遍历、哈夫曼树及哈夫曼编码的建立
- 二叉树的建立与遍历(C语言简单实现)
- 二叉树建立以及递归、非递归遍历