我思故我在系列——数据结构NO.16题(题目搜集整理者JULY,非常感谢!!)
来源:互联网 发布:手机拍一寸照的软件 编辑:程序博客网 时间:2024/05/16 08:28
从“我不行”的枷锁中挣脱出来吧,你就能达到期望的高度。
——摘自 奥格.曼狄诺《羊皮卷》
第16题
题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。例如输入
8
/ \
6 10
/\ /\
5 7 9 11
33
输出8 6 10 5 7 9 11。
这道题的本质是在二元树上实现广度优先遍历.
利用双端队列的特性:先进先出,后进后出来满足输出顺序的要求
#include <deque>
#include <assert.h>
#include <iostream>
using namespace std;
typedef struct BTreeNode
{
int Value;
struct BTreeNode* Leftchild;
struct BTreeNode* Rightchild;
}Tnode,*Tree;
void PrintFromTopToBottom(BTreeNode *pTreeRoot)
{
assert(pTreeRoot!=NULL);
deque<BTreeNode *> dequeTreeNode;
dequeTreeNode.push_back(pTreeRoot);
while(dequeTreeNode.size()!=0)
{
BTreeNode *pNode = dequeTreeNode.front();
dequeTreeNode.pop_front();
cout << pNode->Value << ' ';
if(pNode->Leftchild)
dequeTreeNode.push_back(pNode->Leftchild);
if(pNode->Rightchild)
dequeTreeNode.push_back(pNode->Rightchild);
}
}
void addTree(Tree& T, int num)
{
if(T == NULL)
{
T = (BTreeNode *)malloc(sizeof(Tnode));
T->Value = num;
T->Leftchild = NULL;
T->Rightchild = NULL;
return;
}
else if(T->Value > num)
{
addTree((T->Leftchild), num);
}
else if(T->Value < num)
{
addTree((T->Rightchild), num);
}
else
{
cout << "重复加入同一结点" << endl;
}
}
int main()
{
BTreeNode* pRoot = NULL;
addTree(pRoot, 8);
addTree(pRoot, 6);
addTree(pRoot, 5);
addTree(pRoot, 7);
addTree(pRoot, 10);
addTree(pRoot, 9);
addTree(pRoot, 11);
PrintFromTopToBottom(pRoot);
return 0;
}
/*知识扩展:
* 广度优先搜索(Breadth-First-Search),一般选择用队列来完成;
从一个图的某一个顶点V0出发,首先访问和V0相邻的且未被访问过的顶点V1、V2、……Vn,
然后依次访问与V1、V2……Vn相邻且未被访问的顶点。如此继续,找到所要找的顶点或者遍历完整个图。
* 深度优先搜索(Deep-First-Search),由于要采用返回操作,一般采用的是递归(循环+栈)的方法。* 深度优先搜索所遵循的策略就是尽可能“深”的在图中进行搜索,对于图中某一个顶点V,如果它还有相邻的顶点(在有向图中就是还有以V为起点的边)且未被访问,则访问此顶点。如果找不到,则返回到上一个顶点。这一过程一直进行直到所有的顶点都被访问为止。 DFS可以搜索出从某一个顶点到另外的一个顶点的所有路径。
* 广度优先搜索和深度优先搜索是搜索策略中最经常用到的两种方法,特别常用于图的搜索.
*/
- 我思故我在系列——数据结构NO.16题(题目搜集整理者JULY,非常感谢!!)
- 我思故我在系列—数据结构面试NO.22,NO.23题(题目搜集整理者JULY,非常感谢!!)
- 我思故我在系列—数据结构题(题目搜集整理者july,非常感谢!)
- 我思故我在系列—数据结构NO.21题(题目搜集整理者JULY,非常感谢!!)
- 我思故我在系列—数据结构NO.25题(题目搜集整理者JULY,非常感谢!!)
- 我思故我在系列—数据结构NO.26题(题目搜集整理者JULY,非常感谢!!)
- 我思故我在系列—数据结构面试NO.27题(题目搜集整理者JULY,非常感谢!!)
- 我思故我在系列—数据结构NO.28题(题目搜集整理者JULY,非常感谢!!)
- 我思故我在系列—数据结构面试NO.29题(题目搜集整理者JULY,非常感谢!!)
- 我思故我在系列—数据结构面试NO.30题(题目搜集整理者JULY,非常感谢!!)
- 我思故我在系列—数据结构面试NO.35题(题目搜集整理者JULY,非常感谢!!)
- 我思故我在系列—数据结构题NO.36(题目搜集整理者july,非常感谢!!)
- 我思故我在系列—数据结构NO.31,NO.32(题目搜集整理者JULY,非常感谢!!)
- 我思故我在系列—数据结构NO.33,NO.34(题目搜集整理者JULY,非常感谢!!)
- 我思故我在系列—数据结构面试NO.15(题目搜集整理者JULY,非常感谢!!)
- 我思故我在系列—数据结构面试题NO.17(题目搜集整理者JULY,非常感谢!!)
- 我思故我在系列—数据结构面试NO.24(题目搜集整理者JULY,非常感谢!!)
- 我思故我在系列—数据结构题(题目来自July,整理者July,非常感谢!)
- Java 生成PDF方法总结
- 乐Pad A1上手视频
- android 4.0 今天正式发布,开个4.0的专题
- SurfaceFlinger中的SharedClient
- servletContext的应用介绍总结
- 我思故我在系列——数据结构NO.16题(题目搜集整理者JULY,非常感谢!!)
- vim多行增加缩进
- android编译要求安装jdk1.5的解决办法
- pictureBox中使用滚动条 c# dotnet
- 界面记录
- Lucene分词与查询
- 三种主流VPN技术在档案信息共享网络中的应用研究
- 清华计算机专业考研经验分享
- java中java.lang.NoSuchMethodException: com.opensymphony.xwork2.ActionSupport.ledgerManage()错