非递归建立二叉树 c
2011-01-20 10:52
274 查看
1. 非递归建立二叉树 c
建立过程如下图所示:
插入左子树时压栈,插入右子树时出栈
建立过程如下图所示:
插入左子树时压栈,插入右子树时出栈
#include <stdio.h> #include <stdlib.h> #define MAX_SIZE 200 struct node { char data; struct node *left,*right; }; //新建一个结点,并为新结点赋值 struct node * malloc_node(char data) { struct node * temp = NULL; remalloc: temp = (struct node *)malloc(sizeof(struct node)); if (temp == NULL) { goto remalloc; } temp->data = data; //如果不初始化为NULL,则结束条件if(head==NULL)不成立 temp->left = NULL; temp->right = NULL; return temp; } struct node * create_bintree(char* tree_node) { struct node * root = NULL; struct node * root_t = NULL; struct node * temp = NULL; struct node * stack[MAX_SIZE]; int top = -1; //若首字符为'#',则建空树 if (*tree_node == '#') { printf("create an empty bintree!/n"); return NULL; } //非空树 root = malloc_node(*tree_node); root_t = root; while(*tree_node != '/0') { //若上一个插入字符为#,不为叶子结点,继续插入左子树 if (*tree_node != '#') { tree_node ++; stack[++top] = root_t;//入栈 //插入新结点 temp = malloc_node(*tree_node); root_t->left = temp; root_t = temp; } //若上一个插入字符为#,上一个插入结点为叶子结点,出栈 if (*tree_node == '#' && top!=-1 ) { tree_node ++; root_t = stack[top--];//出栈 //插入新结点 temp = malloc_node(*tree_node); root_t->right = temp; root_t = temp; } if (*tree_node=='#' && top==-1) { *tree_node++; } } return root; } //前序遍历 void preorder_traversal(struct node *root) { if(root != NULL) { if(root->data != '#') printf("%c",root->data); preorder_traversal(root->left); preorder_traversal(root->right); } } int main(int argc, char* argv[]) { //每个叶子后必须加##,否则会多插入一个空字符结点 char tree_node[20]={'1','2','#','#','3','#','#','/0'}; struct node * root = NULL; root = create_bintree(tree_node); preorder_traversal(root); printf("/n"); }
相关文章推荐
- 二叉树基本操作的递归实现(二叉树建立,先序,中序,后序,深度的递归遍历。广度优先,高度优先的非递归遍历)
- 数据结构二叉树——建立二叉树、中序递归遍历、非递归遍历、层次遍历
- 用递归方法建立二叉树
- 二叉树的递归建立以及深度优先遍历
- 二叉树非递归先序建立与后序遍历
- 注释:二叉树的递归建立+二叉树非递归建立
- 已知前序、中序,递归建立二叉树(C语言)
- c语言二叉树的递归建立
- 二叉树的建立、销毁、各种遍历(递归、非递归)
- 数据结构之二叉树的递归建立和遍历
- python实现二叉树的建立以及遍历(递归前序、中序、后序遍历,队栈前序、中序、后序、层次遍历)
- 二叉树递归建立
- C++实现二叉树的建立和三种递归遍历
- (C++)二叉树的建立与递归方式遍历
- 二叉树递归建立和遍历
- java递归方法建立搜索二叉树,具备查找关键字,插入新节点功能
- c++ 二叉树 的递归建立和递归遍历
- 二叉树的递归创建,以及二叉查找树查找的建立 和遍历查找的比较
- java建立二叉树,递归/非递归先序遍历,递归/非递归中序遍历,层次遍历
- 输入完全二叉树的先序序列,用#代表虚结点(空指针),如ABD###CE##F##,建立二叉树的二叉链表。 (2)写出对用二叉链表存储的二叉树进行先序、中序和后序遍历的递归和非递归算法。 (3)写出