C语言实现二叉树的DFS
2016-07-12 18:09
423 查看
# include <stdio.h> # include <stdlib.h> # include <malloc.h> struct NODE //树的结点和栈的结点合并 { char data; struct NODE *lchild; struct NODE *rchild; struct NODE *next; }; struct POINT //指向栈顶和栈底的结构体 { struct NODE *top; struct NODE *bottom; }; struct NODE *BuildTree(void); struct POINT *InitStack(void); void Push(struct POINT *p, struct NODE *q); void Pop(struct POINT *p); bool Empty(struct POINT *p); void DFS(struct NODE *root); int main() { struct NODE *root = BuildTree(); DFS(root); return 0; } struct NODE *BuildTree(void) //先序顺序输入 { char val; struct NODE *root = NULL; scanf("%c", &val); if (' ' == val) { return NULL; } else { root = (struct NODE *)malloc(sizeof(struct NODE)); if (NULL == root) { printf("内存申请失败!\n"); exit(-1); } root->data = val; root->lchild = BuildTree(); root->rchild = BuildTree(); return root; } } struct POINT *InitStack(void) { struct NODE *q = (struct NODE *)malloc(sizeof(struct NODE)); if (NULL == q) { printf("申请内存失败!\n"); exit(-1); } struct POINT *point = (struct POINT *)malloc(sizeof(struct POINT)); if (NULL == point) { printf("申请内存失败!\n"); exit(-1); } point->bottom = q; point->top = q; q->next = NULL; return point; } void Push(struct POINT *p, struct NODE *q) //第一个参数是栈 第二个参数是要压栈的元素 { q->next = p->top; p->top = q; } void Pop(struct POINT *p) { struct NODE *temp = p->top; p->top = temp->next; free(temp); } bool Empty(struct POINT *p) { if (p->top == p->bottom) return true; else return false; } void DFS(struct NODE *root) { struct POINT *stack = InitStack(); struct NODE *temp; Push(stack, root); while ( !Empty(stack) ) { temp = stack->top; printf("%c ", temp->data); Pop(stack); if ( temp->rchild ) { Push(stack, temp->rchild); } if ( temp->lchild ) { Push(stack, temp->lchild); } } }
相关文章推荐
- 《C++标准库》
- C++ 模板类友元之输出流操作符重载
- c/c++ 函数中局部变量的返回
- 图形算法基础之向量
- 关于C/C++发送到打印机的一些问题处理
- c++ **p的意思是什么呢?大家真正了解**p吗
- 设计模式C++实现(16)——状态模式
- 李洪强iOS开之【零基础学习iOS开发】【02-C语言】04-常量、变量
- 设计模式C++实现(15)——观察者模式
- 设计模式C++实现(14)——职责链模式
- C语言入门(二十五)文件操作
- 设计模式C++实现(13)——中介者模式
- 设计模式C++实现(12)——备忘录模式
- 设计模式C++实现(11)——装饰模式
- c++运算符重载
- 设计模式C++实现(10)——桥接模式
- 设计模式C++实现(9)——享元模式
- C语言冒泡法排序
- 设计模式C++实现(8)——代理模式
- 设计模式C++实现(7)——外观模式、组合模式