签到

05月06日
尚未签到

共有回帖数 0

    完美洒脱

    等级:
    二叉数访问有前,中,后续的访问方法

    此贴只探讨前序法 , 中后续大同小异

    二叉数前序法 , 见过最多的就是用递归来实现

    void PreOrderByRecusion(node* temp)
    {
       if ( temp == NULL ) return;
       output[site++] = temp-data;
       PreOrderByRecusion(temp-LeftChild);
       PreOrderByRecusion(temp-RightChild);
    }

    不过还可以用静态数组来实现
    其原理就是队

    为了能有一个二叉树作为实验对象
    所以决定用排序二叉树来生成树

    #include cstdio
    int ar[100] = {4,2,3,6,7,1,8,9,10,-1,-3};
    struct node
    {
       int data;
       node *LeftChild;
       node *RightChild;
    };
    node *TreeHead = NULL ,*current, *backup;

    void CreateTree(int val)
    {
       node *temp = new node;
       temp-data = val;
       temp-LeftChild = NULL;
       temp-RightChild = NULL;

       if ( TreeHead == NULL ) TreeHead = temp;
       else
       {
           for ( current = TreeHead ; current ; )
           {
               backup = current;
               if ( current-data  val )
                   current = current-LeftChild;
               else
                   current = current-RightChild;
           }
           if ( backup-data  val )
               backup-LeftChild = temp;
           else
               backup-RightChild = temp;
       }
    }

    // 以上写了一大堆 , 只是为了产生一个二叉树 ,
    int ar[100] = {4,2,3,6,7,1,8,9,10,-1,-3}; //为二叉数提供的数据
    node *TreeHead = NULL; //树根

    切入正题

    node* nodeStack[100] ;

    void PreOrderByStack()
    {
       if ( nodeStack[0] == NULL && TreeHead != NULL )
           nodeStack[0] = TreeHead;
       for (int i=0,k = 0;i9;i++ , k=0)
       {
           if ( nodeStack-LeftChild != NULL)
           {
               for (int j = 98 ; j = i+1 ; j-- )
                   nodeStack[j+1] = nodeStack[j] ;
               nodeStack[i+1] = nodeStack-LeftChild ; k++;
           }
           if ( nodeStack-RightChild != NULL)
           {
               for (int j = 98 ; j = i+2 ; j-- )
                   nodeStack[j+1] = nodeStack[j] ;
               nodeStack[i+k+1] = nodeStack-RightChild ;
           }
       }
    }

    //node* nodeStack[100] ;   此为静态数组,用来储存前序遍历后的结果



    楼主 2016-04-15 12:33 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知