zoukankan      html  css  js  c++  java
  • 二叉树的遍历及实现 沧海

    树是一种非线性的二维数据结构。

        这里要说的是一种特殊的二叉树,叫对分查找树。特点在于:左子树的所有值都比根节点小,右子树的所有值都比根节点大。

        对分查找树的三种遍历:

        中序遍历(inOrder)        遍历左子树;处理节点中的值;遍历右子树。

        前序遍历(preOrder)     处理节点中的值;遍历左子树;遍历右子树。

        后序遍历(postOrder)   遍历左子树;遍历右子树;处理节点中的值。

    注意的是,对分查找树中序遍历的结果是对数列进行升序排列。因此中序遍历又叫二叉树排序。

       下面的程序说明对分查找树的生成和三种遍历的实现。

    /*author:zhanglin*/

    #include
    #include
    #include

    struct treeNode{
     struct treeNode *leftPtr;
     int data;
     struct treeNode *rightPtr;
    };

    typedef struct treeNode TreeNode;
    typedef TreeNode *TreeNodePtr;

    void insertNode(TreeNodePtr *, int);
    void inOrder(TreeNodePtr);
    void preOrder(TreeNodePtr);
    void postOrder(TreeNodePtr);

    int main(){
     int i, item;
     TreeNodePtr rootPtr= NULL;

     srand(time(NULL));

     /*insert random values between 1 and 15 in the tree*/
     printf("the number being placed in the tree are:\n");
     for(i=0; i<10;i++){
      item = rand()%15;
      printf("%3d", item);
      insertNode(&rootPtr, item);
     }

     /*traverse the tree in inOrder*/
     printf("\ntraverse the tree in inOrder\n");
     inOrder(rootPtr);

     /*traverse the tree in preOrder*/
     printf("\ntraverse the tree in preOrder\n");
     preOrder(rootPtr);

     /*traverse the tree in postOrder*/
     printf("\ntraverse the tree in postOrder\n");
     postOrder(rootPtr);

     return 0;

    }

    void insertNode(TreeNodePtr *ptr, int value){
     if(*ptr==NULL){
      *ptr = (TreeNodePtr)malloc(sizeof(TreeNode));

      if(*ptr!=NULL){
                (*ptr)->data = value;
       (*ptr)->leftPtr = NULL;
       (*ptr)->rightPtr = NULL;
      }else{
       printf("\nerror. No memory available\n");
      }
     }else{
      if(value<(*ptr)->data){
       insertNode(&((*ptr)->leftPtr), value);
      }else if(value>(*ptr)->data){
                insertNode(&((*ptr)->rightPtr), value);
      }else{
                printf("\nduplicate data\n");
      }
     }
    }

    void inOrder(TreeNodePtr ptr){
     if(ptr!=NULL){
       inOrder(ptr->leftPtr);
       printf("%3d", ptr->data);
       inOrder(ptr->rightPtr);
     }
    }

    void preOrder(TreeNodePtr ptr){
     if(ptr!=NULL){
       printf("%3d", ptr->data);
       preOrder(ptr->leftPtr);
       preOrder(ptr->rightPtr);
     }
    }

    void postOrder(TreeNodePtr ptr){
     if(ptr!=NULL){
       postOrder(ptr->leftPtr);
       postOrder(ptr->rightPtr);
       printf("%3d", ptr->data);
     }
    }

    专注于企业信息化,最近对股票数据分析较为感兴趣,可免费分享股票个股主力资金实时变化趋势分析工具,股票交流QQ群:457394862
  • 相关阅读:
    洛谷 P1781 宇宙总统
    洛谷 P2524 Uim的情人节礼物·其之弐(康拓展开)
    洛谷 P1123 取数游戏
    洛谷 P4147 玉蟾宫 & P1169 [ZJOI2007]棋盘制作(求最大子矩阵)
    洛谷 P1387 最大正方形 & P2701 [USACO5.3]巨大的牛棚Big Barn (求最大子正方形)
    洛谷 P1464 Function
    洛谷 P1217 [USACO1.5]回文质数 Prime Palindromes
    洛谷 P1160 队列安排
    洛谷 P1451 求细胞数量
    洛谷 P1914 小书童——密码
  • 原文地址:https://www.cnblogs.com/omygod/p/554699.html
Copyright © 2011-2022 走看看