共有回帖数 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号
意见反馈 |
关于直线 |
版权声明 |
会员须知