#include<stdio.h>
#include<stdlib.h>
typedef struct Node {
int data;
struct Node * left;
struct Node * right;
}BTNode;
BTNode * CreatBTree(int a[],int n) {
int i;
BTNode *root = NULL, *p = NULL, *c = NULL, *pa = NULL;
//创建二叉树的根节点
root = (BTNode *)malloc(sizeof(BTNode));
root->data = a[0];
root->left = root->right = NULL;
//创建其他结点
for (i = 1; i < n; i++) {
p = (BTNode *)malloc(sizeof(BTNode));
p->data = a[i];
p->left = p->right = NULL;
c = root;
while (c) {
pa = c;
if (c->data > p->data) {
c = c->left;
}
else {
c = c->right;
}
}
if (pa->data > p->data) {
pa->left = p;
}
else {
pa->right = p;
}
}
return root;
}
//非递归按层遍历输出二叉树
void PrintBTree(BTNode *root, int n) {
//创建存放二叉树节点地址的动态数组
BTNode **s = (BTNode**)malloc(sizeof(BTNode*)*(n + 1));
BTNode *p = NULL;
int top = -1;
s[++top] = root;
while (top + 1) {
p = s[top--]; //出栈,并输出出栈元素的数据域
printf("%d,", p->data);
if (p->right) { //判断该结点是否有右子女,有的话入栈
s[++top] = p->right;
}
if (p->left) { //判断该节点是否有左子女,有的话入栈
s[++top] = p->left;
}
}
}
int main(void) {
int a[8] = { 3,2,5,8,4,7,6,9 };
BTNode * root;
root = CreatBTree(a, 8);
PrintBTree(root, 8);
return 0;
}
二叉树的非递归按层遍历
最新推荐文章于 2021-12-05 12:34:26 发布