zoukankan      html  css  js  c++  java
  • 二叉树的遍历(深度优先)

    深度优先法、

    这种方法基于递归的思想,先查看完一棵字数上的全部结点后再查看另一棵子树上的结点。按照对左子树、根结点、右子树的查看顺序,划分了4种不同的遍历顺序:先根顺序、后根顺序、左子树优先、右子树优先。

    程序示例(先根顺序、左子树优先顺序)、

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 struct TreeNode {
     5     int val;
     6     TreeNode *Left, *Right;
     7 }; //建立二叉树结点数据类型。
     8 
     9 TreeNode * insertTree(TreeNode * root, int val) { //想二叉树中添加新的结点。
    10     TreeNode * newNode;
    11     if(root == NULL) {
    12         newNode = new TreeNode;
    13         newNode -> val = val;
    14         newNode -> Left = NULL;
    15         newNode -> Right = NULL;
    16         return newNode;
    17     }
    18         if(val <= root -> val)
    19             root -> Left = insertTree(root -> Left, val) ;
    20         else
    21             root -> Right = insertTree(root -> Right, val);
    22         return root;
    23 }
    24 
    25 void delTree(TreeNode * root) { //删除二叉树占用的存储空间。
    26     if(root -> Left != NULL) delTree(root -> Left);
    27     if(root -> Right != NULL) delTree(root -> Right);
    28     delete root;
    29     return;
    30 }
    31 
    32 void LFRTraverse(TreeNode * root) { //采用左子树优先的顺序遍历二叉树,每访问一个结点时,就输出该结点的值。
    33     if(root -> Left != NULL) LFRTraverse(root -> Left);
    34     printf("%d", root -> val);
    35     if(root -> Right != NULL) LFRTraverse(root -> Right);
    36     return;
    37 }
    38 
    39 void FLRTraverse(TreeNode * root) { //采用先根顺序遍历二叉树,每访问一个结点时,就输出该结点的值。
    40     printf("%d", root -> val);
    41     if(root -> Left != NULL) FLRTraverse(root -> Left);
    42     if(root -> Right != NULL) FLRTraverse(root -> Right);
    43     return;
    44 }
    45 
    46 int main()
    47 {
    48     FILE * fin;
    49     TreeNode * root;
    50     int val;
    51     char inFile[30];
    52     printf("input the data file's name: ");
    53     scanf("%s", inFile);
    54     fin = fopen("data.txt", "r"); //从输入文件中读入数据,建立一个二叉树。
    55     root = NULL;
    56     while(fscanf(fin, "%d", &val) != EOF) root = insertTree(root, val);
    57     fclose(fin);
    58     printf("traversing left sub - tree firstly, then root,  and right sub - tree lastly: 
    ");
    59     LFRTraverse(root); printf("
    ");
    60     printf("traversing root firstly, then left sub - tree, and right sub - tree lastly: 
    ");
    61     FLRTraverse(root); printf("
    ");
    62     delTree(root);
    63     return 0;
    64 }
    View Code
  • 相关阅读:
    由PhysicalFileProvider构建的物理文件系统
    Net Core WebApi单元测试
    多个项目使用NET Core
    ReactNative
    定制样式插入到ueditor
    ES6的Class
    Redis存储Session
    二叉 查找树 排序树 搜索树
    SignalR实现实时日志监控
    KNN(k-nearest neighbor的缩写)又叫最近邻算法
  • 原文地址:https://www.cnblogs.com/xzrmdx/p/5175004.html
Copyright © 2011-2022 走看看