新手一枚,希望记下自己写的代码,希望各位亲能够给我提出意见和建议
#include<stdio.h>
#include<stdlib.h>
#define MAX 999 //MAX表示结点是否置为空
#define MAX_SIZE 100 //栈的最大容量
typedef int ElemType;
typedef struct TreeNode{ //定义树节点
int data;
struct TreeNode* rightchild;
struct TreeNode* leftchild;
}TreeNode;
typedef struct Stack{//定义树节点栈
TreeNode* stack[MAX_SIZE];
int top;//栈顶索引,初始化为-1,
}Stack;
void CreateStack(Stack &s){//创建栈
for(int i=0;i<MAX_SIZE;i++)
s.stack[i]= NULL;
s.top = -1;
}
void Push(Stack &s,TreeNode* treenode){//将treenode元素压栈
s.stack[++s.top] = treenode;
}
void Pop(Stack &stack){//将栈顶元素弹栈
stack.top--;
}
TreeNode* GetTop(Stack s){
return s.stack[s.top];
}
bool IsEmpty(Stack s){//判断栈是否为空
if(s.top == -1)
return true;
else
return false;
}
void CreateTree(TreeNode* &root){
int data;
Stack stack;
TreeNode* top,* temp;
top = temp =NULL;
CreateStack(stack);//创建栈
printf("输入首树节点的数据域,999代表为空\n");
scanf("%d",&data);
if(data == MAX)
root = NULL;
else{
root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = data;
root->leftchild = NULL;
root->rightchild = NULL;
Push(stack,root);
}//判断检测树根是否为空,不空则压栈
while(!IsEmpty(stack)){//若栈不空,则继续输入数据
top = GetTop(stack);//获取栈顶元素
if(top->leftchild == NULL && top->rightchild == NULL){
printf("输入%d的左孩子\n",top->data);
scanf("%d",&data);
if(data == MAX)
top->leftchild = NULL;
else{//若栈顶元素左孩子不空则压栈
temp = top->leftchild = (TreeNode*)malloc(sizeof(TreeNode));
temp->data = data;
temp->leftchild = NULL;
temp->rightchild = NULL;
Push(stack,temp);
continue;
}//else
}//if对栈顶元素左孩子操作
if(top->rightchild == NULL){
printf("输入%d的右孩子\n",top->data);
scanf("%d",&data);
if(data == MAX)
top->rightchild = NULL;
else{
temp = top->rightchild = (TreeNode*)malloc(sizeof(TreeNode));
temp->data = data;
temp->leftchild = NULL;
temp->rightchild = NULL;
Push(stack,temp);
continue;
}
}//if
Pop(stack);
}//while
}
void ShowTree(TreeNode* root){//递归先序遍历树
if(root!=NULL){
printf("%4d",root->data);
ShowTree(root->leftchild);
ShowTree(root->rightchild);
}
}
int main()
{//主函数
TreeNode *root;
CreateTree(root);
ShowTree(root);
printf("\n");
return 0;
}
对于栈的操作 ,仅仅做了简单操作;