層序遍歷二叉樹
週末要給老師寫個期中考試的題解
最後兩道題全都是關於二叉樹的一些演算法
層序遍歷二叉樹直接輸入資料,建立二叉排序樹,利用佇列層序輸出即可,沒什麼難度
貼下自己的程式碼
//功能:層序遍歷二叉樹
//時間:2014-11-23
#include <iostream>
#include <queue>
using namespace std;
//二叉連結串列資料結構定義
#define TElemType int
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild, *rchild;
}*BiTree;
//定義佇列
queue<BiTree> BiTreeQueue;
//定義根結點
BiTree root=NULL;
//根據輸入的序列建立一顆二叉排序樹(Binary Sort Tree),它的中序遍歷是有序的
void CreatBST(const int &a)
{
BiTree p,q,s;
//分配結點s的記憶體空間
s=(BiTree)malloc(sizeof(BiTNode));
//將插入的值a賦值給s結點,並初始化左右孩子
s->data=a;
s->lchild=NULL;
s->rchild=NULL;
//判斷根節點是否為空
if(root==NULL)
{//為空
root=s;
return;
}else{
//不為空
p=root;
while(p)
{
//儲存p指標
q=p;
if(p->data==a)
{
cout << "該結點已經存在,請重新輸入"<<endl;
return;
}else if(p->data>a){
//指向左孩子
p=p->lchild;
}else{
//指向右孩子
p=p->rchild;
}
}
//插入s結點
if(s->data>q->data)
q->rchild=s;
else
q->lchild=s;
}
}
//層序遍歷二叉樹
void LeverOrderTraverse(const BiTree &T)
{
//將根節點壓入佇列
BiTreeQueue.push(T);
//如果佇列不空,則一直迴圈
while(!BiTreeQueue.empty())
{
//獲取隊首元素
BiTree temp=BiTreeQueue.front();
//列印隊首元素
cout << temp->data << " ";
//隊首元素出隊
BiTreeQueue.pop();
//將該結點的左右孩子入隊
//如果左孩子不為空,壓入左孩子
if(temp->lchild)
BiTreeQueue.push(temp->lchild);
//如果右孩子不為空,壓入右孩子
if(temp->rchild)
BiTreeQueue.push(temp->rchild);
}
cout << endl;
}
int main()
{
//清空佇列
while(!BiTreeQueue.empty())
{
BiTreeQueue.pop();
}
int x;
//輸入結點資料,插入二叉樹
while(1)
{
cout << "請輸入要建立二叉樹的結點資料(單個資料,以-1結束): ";
cin >> x;
if(x==-1)
break;
CreatBST(x);
}
cout << "二叉樹的層序遍歷如下所示:" << endl;
//層序遍歷二叉樹
LeverOrderTraverse(root);
return 0;
}
相關文章
- 二叉樹的層序遍歷二叉樹
- 二叉樹建立,前序遍歷,中序遍歷,後序遍歷 思路二叉樹
- 二叉樹的建立、前序遍歷、中序遍歷、後序遍歷二叉樹
- 二叉樹--後序遍歷二叉樹
- 二叉樹的四種遍歷方法:先序,中序,後序,層序二叉樹
- 建立二叉樹:層次遍歷--樹的寬度高度,後序遍歷--祖先節點二叉樹
- 二叉樹:構造二叉樹(通過前序和中序遍歷)、映象翻轉、層次遍歷二叉樹
- python-二叉樹:前、中、後、層序遍歷Python二叉樹
- 二叉樹的按層遍歷二叉樹
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- 【C++】返回每一層二叉樹的平均值(層序遍歷)C++二叉樹
- 遞迴和迭代實現二叉樹先序、中序、後序和層序遍歷遞迴二叉樹
- LintCode 前序遍歷和中序遍歷樹構造二叉樹二叉樹
- LeetCode102.二叉樹的層序遍歷LeetCode二叉樹
- 二叉樹中序和後序遍歷表示式二叉樹
- 根據前序遍歷序列、中序遍歷序列,重建二叉樹二叉樹
- 非遞迴遍歷二叉樹的四種策略-先序、中序、後序和層序遞迴二叉樹
- 非遞迴先序遍歷二叉樹遞迴二叉樹
- 388,先序遍歷構造二叉樹二叉樹
- 二叉樹的先,中,後序遍歷二叉樹
- 二叉樹的先中後序遍歷二叉樹
- 二叉樹的前中後序遍歷二叉樹
- 3143 二叉樹的序遍歷二叉樹
- 資料結構與演算法——二叉樹的前序遍歷,中序遍歷,後序遍歷資料結構演算法二叉樹
- LeetCode-107-二叉樹的層序遍歷 IILeetCode二叉樹
- 二叉樹的前序、中序、後序三種遍歷二叉樹
- 二叉樹遍歷順序與方法小結二叉樹
- 94. 二叉樹的中序遍歷(迭代)二叉樹
- 二叉樹---遍歷二叉樹
- 二叉樹遍歷二叉樹
- Leetcode 演算法題解系列 - 二叉樹的層序遍歷LeetCode演算法二叉樹
- 二叉樹的層序遍歷詳細講解(附完整C++程式)二叉樹C++
- 二叉樹的前序,中序,後序遍歷方法總結二叉樹
- 從中序與後序遍歷序列構造二叉樹二叉樹
- 程式碼隨想錄演算法訓練營,9月9日 | 二叉樹遞迴遍歷,迭代遍歷,層序遍歷演算法二叉樹遞迴
- 採用層次遍歷判斷二叉樹為完全二叉樹二叉樹
- 中序線索二叉樹的建立與遍歷二叉樹