二叉树的建立与遍历
来源:互联网 发布:html js 格式化工具 编辑:程序博客网 时间:2024/04/29 12:16
二叉树的建立的遍历的一个最主要思想就是递归
建立一个二叉树,实质就是以每一个结点为根结点,建立他的子树
遍历也是一样,都是以子树为单位
上代码
#include<stdio.h>#include<stdlib.h>//ab#d##c#e##// a// b c// # d # e// # # # #struct Node{ char data; struct Node* left; struct Node* right;};Node* CreatTree(){ Node* root;<span style="white-space:pre"></span>//思考一下为什么我要定义定义成指针 char ch; scanf("%c",&ch); if(ch=='#') root= NULL; else { root=(Node*)malloc(sizeof(Node)); root->data=ch; root->left=CreatTree(); root->right=CreatTree(); } return root;}void DLR(Node *root)//先序遍历{ if(root) { printf("%c",root->data); DLR(root->left); DLR(root->right); }}void LDR(Node *root)//中序遍历{ if(root) { LDR(root->left); printf("%c",root->data); LDR(root->right); }}void LRD(Node *root)//后序遍历{ if(root) { LRD(root->left); LRD(root->right); printf("%c",root->data); }}int main(){ Node *root=CreatTree();//还有这儿,也是指针 DLR(root); printf("\n"); LDR(root); printf("\n"); LRD(root); printf("\n"); return 0;}
定义成指针
1,在建立树的函数CreateTree()里,是为了方便返回值,想一想如果就定义成Node型,该怎么返回值
2,定义成指针,还是具有Node型的变量data,而且方便函数参数的传进去,不然,需要考虑值传递啊什么什么的
我上一个麻烦点的二叉树建立吧
#include <stdio.h>#include <stdlib.h>//By ZWRen //ab#d##c#e## // a// b c// # d # e// # # # #struct Node{char data;Node* left;Node* right;};void CreatTree(Node* root){ //Error这个是错的,思考下为什么错了char ch;scanf("%c",&ch);if(ch == '#') root = NULL;else{root = (Node*)malloc(sizeof(Node));root->data = ch;creatTree(root->left);creatTree(root->left);}}void CreatTree2(Node** root){//OK这个是对的,但是好麻烦有木有char ch;scanf("%c",&ch);if(ch == '#') *root = NULL;else{*root = (Node*)malloc(sizeof(Node));(*root)->data = ch;creatTree2(&((*root)->left));creatTree2(&((*root)->right));}}void DLR(Node* root){//先序遍历if(root == NULL) return;printf("%c",root->data);DLR(root->left);DLR(root->right);}int main(){Node* root;CreatTree2(&root);DLR(root);printf("\n");return 0;}
因为你在CreatTree里申请的内存,是通过malloc在堆中申请,你传进去的地址在函数里被重新赋值了
自己好好想想吧,其实是我自己说不明白。
0 0
- 二叉树的建立与遍历
- c++二叉树的建立与遍历
- 二叉树的建立与先序中序后序遍历
- C++二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树的遍历与建立
- 二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树的建立与遍历
- 数据结构 二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树的建立 与 遍历
- 二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树的建立与遍历
- 线索二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树的建立与遍历
- 迷宫问题(maze problem)——深度优先(DFS)与广度优先搜索(BFS)求解
- python while循环和for循环
- 文章标题
- HDU 5675 ztr loves math
- 移动APP、webview调试最佳实践(一)
- 二叉树的建立与遍历
- Remove Duplicates from Sorted Array II
- Spark性能调优
- 用awk根据文件跟列的内容统计数据
- 悲哀!作为服务器,Top 1却是fib_table_lookup
- Druid数据库连接池的使用
- android中xml tools属性详解
- Apache-Tomcat-8.0.9配置基于Python的CGI脚本解析
- opentsdb简介