共有回帖数  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 回复
						 
						 
           
          
          
         
   
         
      
 
   
             
                  
                  
 
 
 
     
	 
  
	Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
	
	意见反馈 | 
	关于直线 | 
	版权声明 | 
	会员须知