【建立二叉树】后序建立二叉树
来源:互联网 发布:图书数据加工人员 编辑:程序博客网 时间:2024/06/05 05:06
由后序遍历可知,输入顺序是左结点->右结点->子树根结点
比如输入如下树:
a
/ \
b c
/
d
\
e
输入序列为 * * * e d * b * * c a $
思路:
使用栈,对左结点和右结点进行压栈;
1.当输入遇到非*,且栈中元素大于等于2,则可以确定一个小三角树形,并将这个树根作为下一个小三角树形的一个子节点;
2.当输入遇到非*,但栈中元素小于2,则直接将此元素压入栈中;
3.当输入遇到*,压入NULL;
4.当输入遇到$,输入结束。
#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct node{struct node* lc;struct node* rc;int id;}node;typedef struct stack{node **head;node **top;int max;int used;}stack;#define stack_increasement 20#define stack_initsize 10void init_stack(stack *s){s->used = 0;s->head = (node**)malloc(sizeof(node*)*stack_initsize);s->top = s->head;s->max = stack_initsize;}void push_stack(stack *s, node* d){*(s->top++) = d;s->used ++;if(s->used==s->max){s->max+=stack_increasement;s->head = (node**)realloc(s->head, sizeof(node*)*s->max);s->top = s->head+s->used;}}node* pop_stack(stack *s){if(s->used==0)return (node*)-1;s->used --;s->top --;return *(s->top);}void bc(node **T){int input;stack s;node *lctmp, *rctmp;node *temp;init_stack(&s);scanf("%d", &input);while(input!=0){if(input<0){push_stack(&s, NULL);}else{if(s.used>=2){rctmp = pop_stack(&s);lctmp = pop_stack(&s);temp = (node*)malloc(sizeof(node));temp->lc = lctmp;temp->rc = rctmp;temp->id = input;push_stack(&s, temp);}else{temp = (node*)malloc(sizeof(node));temp->lc = NULL;temp->rc = NULL;temp->id = input;push_stack(&s, temp);}}scanf("%d", &input);}*T = pop_stack(&s);}void pre_visit_tree(node *T){ //递归法if(T!=NULL){printf("%d ", T->id);pre_visit_tree(T->lc);pre_visit_tree(T->rc);}else{return;}}int main(void){node *tree;bc(&tree);pre_visit_tree(tree);system("pause");return 0;}
0 0
- 【建立二叉树】后序建立二叉树
- 前序建立二叉树
- 二叉树建立 先序 中序 后序输出
- 【二叉树】根据后序表达式建立表达式树
- 二叉树的建立&中序&后序&深度
- 二叉树的建立(后序+中序)
- 根据后序和中序建立二叉树
- 建立二叉树,先、中、后序遍历
- 递归建立二叉树
- 二叉树的建立
- 二叉树建立
- 中序层序建立二叉树
- 后序中序建立二叉树
- 先序中序建立二叉树
- 二叉树的建立
- 二叉树的建立
- 二叉树 - 建立
- 二叉树的建立
- Oracle 参数文件
- WebM Web Video Encoding Tutorial With FFMpeg
- PAT 1023. Have Fun with Numbers (20)
- 实时编辑表格,可以编辑的表格
- 营业额统计
- 【建立二叉树】后序建立二叉树
- 验证表单元素常用的正则表达式
- Binary Tree Preorder Traversal
- Visual Studio 2010 正式版激活的两种方法小结
- 【总结】Jekyll搭建博客
- 黑马程序员——IO流
- 启动Hadoop的步骤
- 实现接口,相当于有了一层继承关系
- NYOJ 题目1059部分和问题(dfs)