【二叉树】建立 | 先序遍历 | 中序遍历 | 后序遍历 | 层次遍历
2019-02-15 12:06
246 查看
[code]#include<cstdio> #include<stdlib.h> #include<queue> using namespace std; typedef struct Node { char data; Node *left; Node *right; }node; //指typdef struct Node node //结构体定义新变量时必须struct+结构体名,上述语句让struct Node有个别名node //先序建立二叉树 node* createT() { node *root; char ch = getchar(); if(ch=='#') root = NULL; //'#'指空子树 else { root = new node; root->data = ch; root->left = createT(); root->right = createT(); } return root; } //先序遍历 void preOrder(node *T) { if(T==NULL) return; printf("%c ",T->data); preOrder(T->left); preOrder(T->right); } //中序遍历 void inOrder(node *T) { if(T==NULL) return; inOrder(T->left); printf("%c ",T->data); inOrder(T->right); } //后序遍历 void postOrder(node *T) { if(T==NULL) return; postOrder(T->left); postOrder(T->right); printf("%c ",T->data); } //层次遍历 void layerOrder(node *T) { //队列是node*而不是node queue<node*> q; q.push(T); //根元素入队 while(!q.empty()) { node* top = q.front(); //取出队首元素 q.pop(); printf("%c ",top->data); if(top->left) q.push(top->left); //左子树非空 if(top->right) q.push(top->right); //右子树非空 } //无论是遍历还是建立,都不要忘了子树空不空的问题 } int main() { node *T; T = createT(); printf("先序遍历:"); preOrder(T); printf("\n中序遍历:"); inOrder(T); printf("\n后序遍历:"); postOrder(T); printf("\n层次遍历:"); layerOrder(T); return 0; }
相关文章推荐
- 二叉树的先序遍历、中序遍历、后序遍历、层次遍历的递归实现
- 二叉树先序建立,先序遍历,中序遍历,后序遍历(递归)
- 二叉树先序遍历,中序遍历,后序遍历,层次遍历。
- 二叉树的建立及遍历(先序遍历、中序遍历、后续遍历、层次遍历)
- 二叉树-建树,层次遍历,先序遍历,中序遍历,后序遍历
- 二叉树相关操作(先序建立二叉树、求子节点数量,判断是否为平衡二叉树,先序遍历,中序遍历,后序遍历)
- 二叉树先序遍历中序遍历建立二叉树然后后序遍历
- 二叉树的遍历(先序遍历,中序遍历,后序遍历,层次遍历)
- 实现二叉树的先序遍历、中序遍历、后序遍历的递归非递归算法以及层次遍历算法
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 二叉树建立,前序遍历,中序遍历,后序遍历 思路
- 已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历
- C实现二叉树的先序遍历,中序遍历,后序遍历
- java建立二叉树,递归/非递归先序遍历,递归/非递归中序遍历,层次遍历
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- [二叉树建树] 后序遍历与中序遍历建立二叉树
- 已知二叉树先序遍历,中序遍历创建二叉树并输出后序遍历
- 二叉树各种相关操作(建立二叉树、前序、中序、后序、求二叉树的深度、查找二叉树节点,层次遍历二叉树等)(C语言版)
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 已知一颗二叉树,如果先序遍历的节点顺序是:ADCEFGHB,中序遍历是,CDFEGHAB,则后序遍历的结果为