二叉树遍历递归算法
来源:互联网 发布:谁人知 刘德华 编辑:程序博客网 时间:2024/05/17 00:49
输入代码:
#include<stdio.h>#include <malloc.h>#define MaxSize 100typedef char ElemType;using namespace std;typedef struct node{ ElemType data; //数据元素 struct node *lchild; //指向左孩子节点 struct node *rchild; //指向右孩子节点} BTNode;/*建立二叉树*/void CreateBTNode(BTNode *&b,char *str){ BTNode *St[MaxSize],*p; int top=-1,k,j=0; char ch; b=NULL; //二叉树初始时为空 ch=str[j]; while(ch!='\0') //循环扫描str中的每个字符 { switch(ch) { case '(': //开始处理左孩子节点 top++; St[top]=p; k=1; break; case ')': top--; break; case ',': //开始处理右孩子节点 k=2; break; default: p=(BTNode *)malloc(sizeof(BTNode)); p->data=ch; p->lchild=p->rchild=NULL; if(b==NULL) //若尚未建立根节点 b=p; //*p为二叉树的根节点 else //已建立二叉树根节点 { switch(k) { case 1: St[top]->lchild=p; break; case 2: St[top]->rchild=p; break; } } } j++; ch=str[j]; }}void PreOrder(BTNode *b) //先序遍历的递归算法{ if(b!=NULL) { printf("%c",b->data);//访问根节点 PreOrder(b->lchild);//先序遍历左子树 PreOrder(b->rchild);//先序遍历右子树 }}void InOrder(BTNode *b) //中序遍历的递归算法{ if(b!=NULL) { InOrder(b->lchild);//中序遍历左子树 printf("%c",b->data);//访问根节点 InOrder(b->rchild);//中序遍历右子树 }}void PostOrder(BTNode *b) //后序遍历的递归算法{ if(b!=NULL) { PostOrder(b->lchild);//后序遍历左子树 PostOrder(b->rchild);//后序遍历右子树 printf("%c",b->data);//访问根节点 }}int main(){ BTNode *b; CreateBTNode(b,"A(B(D(,G)),C(E,F))"); printf("先序遍历:"); PreOrder(b); printf("\n"); printf("中序遍历:"); InOrder(b); printf("\n"); printf("后序遍历:"); PostOrder(b); printf("\n"); return 0;}
运行截图:
0 0
- 二叉树遍历递归算法
- 算法:二叉树递归遍历
- 二叉树遍历非递归算法
- 二叉树遍历的非递归算法
- 二叉树遍历之递归算法
- 二叉树遍历的递归算法程序
- 非递归遍历二叉树算法
- 二叉树遍历非递归算法
- 二叉树 遍历非递归算法
- 遍历二叉树的非递归算法
- 遍历二叉树的非递归算法
- 二叉树遍历算法非递归
- 二叉树遍历(非递归算法)
- 二叉树遍历非递归算法
- 二叉树遍历之递归算法
- 二叉树遍历之非递归算法
- 二叉树遍历之递归算法
- 二叉树遍历之非递归算法
- Spring配置文件中配置property标签的name和ref的区别
- 超有用的Facebook开源软件列表
- 接口和抽象类的异同——加入Java8的特性。
- 【转】ifndef作用
- Restful API
- 二叉树遍历递归算法
- SpringMVC中使用Interceptor拦截器
- memcached全面剖析–5. memcached的应用和兼容程序
- 一个好的博客应该如何去做呢
- 根据二叉树前序遍历和中序遍历序列求解后序遍历的算法
- 【转】C++ 常量类型 const 详解
- php中实现escape函数
- Group Shifted Strings
- outputstream 的flush 为空