1.带空二叉树的生成和二叉树的非递归遍历
//根据带空二叉树先序序列建树
#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include<stdlib.h>
char s[100] = "ad#ef##g##b#c##";
int t=0;
typedef struct BiTNode {
int data;
BiTNode* lchild, *rchild;
};
void CreateTree(BiTNode*& root, char c) {
if (s[t] == '\0') return;
if (c == '#') root = NULL;
else {//非空子树
root = (BiTNode*)malloc(sizeof(BiTNode));
root->data = c;
CreateTree(root->lchild, s[++t]);
CreateTree(root->rchild, s[++t]);
}
}
void PreOrder(BiTNode* root) {
if (root == NULL) return;
printf("%c", root->data);
PreOrder(root->lchild);
PreOrder(root->rchild);
}
void PreOrder2(BiTNode* root) {//非递归遍历
struct BiTNode* St[100], * p;
int top = 0;//置空栈
if (t != NULL) {
St[top++] = root;//根结点入栈
while (top) {
p = St[--top];
printf("%c", p->data);//根输出
if (p->rchild != NULL) {//右孩子先入栈
St[top++] = p->rchild;
}
if (p->lchild != NULL) {//左孩子入栈
St[top++] = p->lchild;
}
}
}
}
int main() {
//printf("请输入带空序列,以#表示空:");
//scanf("%s", s);
BiTNode* Tree=NULL;
CreateTree(Tree, s[0]);
PreOrder2(Tree);
return 0;
}