二叉树的遍历(深度优先)
2016-02-01 12:11
375 查看
深度优先法、
这种方法基于递归的思想,先查看完一棵字数上的全部结点后再查看另一棵子树上的结点。按照对左子树、根结点、右子树的查看顺序,划分了4种不同的遍历顺序:先根顺序、后根顺序、左子树优先、右子树优先。
程序示例(先根顺序、左子树优先顺序)、
#include<stdio.h> #include<stdlib.h> struct TreeNode { int val; TreeNode *Left, *Right; }; //建立二叉树结点数据类型。 TreeNode * insertTree(TreeNode * root, int val) { //想二叉树中添加新的结点。 TreeNode * newNode; if(root == NULL) { newNode = new TreeNode; newNode -> val = val; newNode -> Left = NULL; newNode -> Right = NULL; return newNode; } if(val <= root -> val) root -> Left = insertTree(root -> Left, val) ; else root -> Right = insertTree(root -> Right, val); return root; } void delTree(TreeNode * root) { //删除二叉树占用的存储空间。 if(root -> Left != NULL) delTree(root -> Left); if(root -> Right != NULL) delTree(root -> Right); delete root; return; } void LFRTraverse(TreeNode * root) { //采用左子树优先的顺序遍历二叉树,每访问一个结点时,就输出该结点的值。 if(root -> Left != NULL) LFRTraverse(root -> Left); printf("%d", root -> val); if(root -> Right != NULL) LFRTraverse(root -> Right); return; } void FLRTraverse(TreeNode * root) { //采用先根顺序遍历二叉树,每访问一个结点时,就输出该结点的值。 printf("%d", root -> val); if(root -> Left != NULL) FLRTraverse(root -> Left); if(root -> Right != NULL) FLRTraverse(root -> Right); return; } int main() { FILE * fin; TreeNode * root; int val; char inFile[30]; printf("input the data file's name: "); scanf("%s", inFile); fin = fopen("data.txt", "r"); //从输入文件中读入数据,建立一个二叉树。 root = NULL; while(fscanf(fin, "%d", &val) != EOF) root = insertTree(root, val); fclose(fin); printf("traversing left sub - tree firstly, then root, and right sub - tree lastly: \n"); LFRTraverse(root); printf("\n"); printf("traversing root firstly, then left sub - tree, and right sub - tree lastly: \n"); FLRTraverse(root); printf("\n"); delTree(root); return 0; }
View Code
相关文章推荐
- Struts2语法--Ognl
- Android Canvas drawText实现中文垂直居中
- sublime 2 注册码
- Qt窗口主题样式切换功能
- 献给初学iOS的小盆友们——微博app项目开发之十八搭建发送微博界面(下)
- zenefits oa - random(5) to generate a random(7)
- Spring实战系列
- 详解Linux中hdparm命令查看硬盘信息的用法
- 【win7】windows下批处理实际应用
- css实现iframe的高度自适应
- org.apache.hadoop.ipc.Client - Retrying connect to server: 0.0.0.0/0.0.0.0:10020. Already tried 0 ti
- 存储过程中-definer和invoker的解释
- 2016这些Android技术会很火
- laravel安装
- NYoj 56 阶乘因式分解(一)
- 【数据结构学习笔记】——根据中缀表达式构建二叉树并输出
- iOS--UITabbarController自定义
- linux命令学习记录
- uva 10404 Bachet's Game
- MTK UART驱动代码分析