二叉树------层序遍历
来源:互联网 发布:php网页编辑软件有哪些 编辑:程序博客网 时间:2024/05/01 19:10
题目描述:
给定一棵二叉树,要求从上到下按层输出。(每一层按从左到右的顺序)
思路:
按照按层创建二叉树的方法,使用一个队列。先将根节点入队,然后每次从队中取出队首元素,并将其左右子节点入队,持续此过程知道队列为空。(NULL不入队)
#include <iostream>#include <deque>#include <stdio.h>using namespace std;#define N 100struct Node { char data; struct Node *left, *right;};struct SeQueue{ struct Node *addr[N]; int front; int end;};Node *MakeTree();void DisplayTree(Node *tree);void PrintTreeByFloor(Node *tree);void DeleteTree(Node **tree);int main(){ Node *myTree = MakeTree(); cout << "MidOrder: " << endl; DisplayTree(myTree); cout << endl; cout << "print tree by floor: " << endl; PrintTreeByFloor(myTree); cout << endl; DeleteTree(&myTree); return 0;}Node *MakeTree(){ char ch; SeQueue Q; SeQueue *q = &Q; q->front = 1; q->end = 0; Node *tmp = NULL; Node *root = NULL; cout << "Input some chars to make a tree(less than 99 and end by '@'):" << endl; ch = getchar(); while(ch != '@' && ch != '\n') { tmp = new Node(); tmp->data = ch; tmp->left = tem->right = NULL; q->end += 1; q->addr[q->end] = tmp; if(root = NULL) { root = tmp; } else { if(q->addr[q->front] != NULL) { if(q->end % 2 == 0) q->addr[q->front]->left = tmp; else q->addr[q->front]->right = tmp; } if(q->end % 2 != 0) q->front += 1; } ch = getchar(); } return root;}void DisplayTree(Node *tree){ Node *p = tree; if(p) { DisplayTree(p->left); cout << p->data << " "; DisplayTree(p->right); }}void PrintTreeByFloor(Node *tree){ if(tree == NULL) return ; deque<Node *> treeNode; treeNode.push_back(tree); while(treeNode.size()) { Node *tmp = treeNode.front(); treeNode.pop_front(); cout << tmp->data << " "; if(tmp->left) treeNode.push_back(tmp->left); if(tmp->right) treeNode.push_back(tmp->right); }}void DeleteTree(Node **tree){ if(tree == NULL) return ; Node *p = *tree; if(p) { DeleteTree(&p->left); DeleteTree(&p->right); delete [] p; } *tree = NULL;}
1 0
- 层序遍历二叉树
- 层序遍历二叉树
- 层序遍历二叉树
- 层序遍历二叉树
- 二叉树-层序遍历
- 二叉树------层序遍历
- 层序遍历二叉树
- 层序遍历二叉树
- 层序遍历二叉树
- 层序遍历二叉树
- 二叉树遍历 层序遍历
- 二叉树层遍历
- 层遍历二叉树
- 层序遍历二叉树VS之字形遍历二叉树
- 二叉树的层序遍历
- 【算法】二叉树遍历(层序)
- 二叉树的层序遍历
- 二叉树的层序遍历
- 协同过滤算法
- Tomcat的JVM内存溢出解决方法
- String,StringBuffer,StringBuilder三者区别
- 网易视频云分享:支持redis节点高可用的twemproxy
- SmartImagView的用法
- 二叉树------层序遍历
- 如何用 Python 实现 Web 抓取?
- 创建自己的pod仓库
- C# Winform WebBrowser控件
- 【刷题之路】二叉树先序序列化
- linux定时器
- Python SMTP发送邮件
- 给exe程序 制作数字签名
- Libgcrypt 代码实例