二叉树的非递归按层遍历

来源:互联网 发布:ubuntu软件中心打不开 编辑:程序博客网 时间:2024/06/06 01:38
#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;}

阅读全文
0 0
原创粉丝点击