二叉树 先序遍历 的两种方法:
1.递归遍历
2.利用链栈 实现非递归遍历
以下代码在vs2010 测试通过:
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#define TRUE 1
#define FALSE 0
typedef struct TreeNode{
int data;
struct TreeNode *lchild,*rchild;
}TNode;
typedef struct StackNode{
TNode *tree;
struct StackNode *next;
}StackNodePro;
typedef struct StackList{
StackNodePro* top;
int count;
}StackListPro;
//前序创建 一个二叉树(递归)
int create_preorder_tree(TNode** Tree){
int em;
printf("请输入节点的值:");
scanf("%d",&em);
if(em == 0){
*Tree = NULL;
return TRUE;
}else{
*Tree =(TNode *)malloc(sizeof(TNode));
if(*Tree == NULL){
return FALSE;
}
(*Tree)->data = em;
create_preorder_tree(&((*Tree)->lchild));
create_preorder_tree(&((*Tree)->rchild));
}
return TRUE;
}
//前序遍历整个二叉树 (递归)
void preorder_tree_recursive(TN