【演算法】輸入一顆二元樹,從上往下按層列印樹的每個結點,同一層中按照從左往右的順序列印
題目:輸入一顆二元樹,從上往下按層列印樹的每個結點,同一層中按照從左往右的順序列印。
例如輸入
8
/ \
6 10
/\ /\
5 7 9 11
輸出8 6 10 5 7 9 11。
思路是遍歷一個結點時,首先訪問它,然後將它的左右子樹放入佇列中。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <queue>
using namespace std;
typedef struct node
{
int key;
struct node *pleft;
struct node *pright;
}Node;
int CreateTreeByInsertData(Node **p,int k)//理解為什麼用二級指標
{
if(*p==NULL)
{
*p=(Node *)malloc(sizeof(Node));
(*p)->key=k;
(*p)->pleft=(*p)->pright=NULL;
return 1;
}
else if(k == (*p)->key)
return 0;
else if(k < (*p)->key)
return CreateTreeByInsertData(&(*p)->pleft,k);
else
return CreateTreeByInsertData(&(*p)->pright,k);
}
void visitByLevel(Node *p)
{
queue<Node*> myQueue;
if(p == NULL)
return;
myQueue.push(p);
while(!myQueue.empty())
{
Node *now = myQueue.front();
myQueue.pop();
printf("%d ",now->key);
if(now->pleft) myQueue.push(now->pleft);
if(now->pright) myQueue.push(now->pright);
}
printf("\n");
}
void ClearTree(Node** tree)//刪除樹的操作,在本題中不一定用的到
{
if(*tree==NULL)return;
ClearTree(&(*tree)->pleft);
ClearTree(&(*tree)->pright);
free(*tree);
*tree=NULL;
}
int main()
{
int i;
Node *proot = NULL;
int data[] = {8,6,10,5,7,9,11};
//依次插入一些資料,建立一個二叉排序樹
for(i=0; i<sizeof(data)/sizeof(int); i++)
CreateTreeByInsertData(&proot, data[i]);
visitByLevel(proot);
ClearTree(&proot);
return 0;
}
相關文章
- 22.從上往下列印二叉樹二叉樹
- JZ32 從上往下列印二叉樹二叉樹
- 給定一個字串,按Z字形列印,在從左向右,從上往下列印字串字串
- 彈性盒佈局之從左往右,空間不夠換行繼續從左往右(從左往右,從上往下,between效果)
- JZ-022-從上往下列印二叉樹二叉樹
- 劍指offer——從上往下列印二叉樹C++二叉樹C++
- 二叉樹實現按層 s型列印二叉樹
- 【演算法】輸入一顆二元查詢樹,將該樹轉換為它的映象演算法
- leetcode----給定一個二叉樹,返回該二叉樹由底層到頂層的層序遍歷,(從左向右,從葉子節點到根節點,一層一層的遍歷)LeetCode二叉樹
- [資料結構] BFS演算法實現層序遍歷輸出一顆二叉樹資料結構演算法二叉樹
- 【C++】返回每一層二叉樹的平均值(層序遍歷)C++二叉樹
- 交換二叉樹中每個結點的左孩子和右孩子二叉樹
- 【劍指offer】從上向下列印二叉樹二叉樹
- 演算法題(三十七):按之字形順序列印二叉樹演算法二叉樹
- 32 從上到下列印二叉樹二叉樹
- JZ-059-按之字形順序列印二叉樹二叉樹
- 每日一練(19):從上到下列印二叉樹二叉樹
- LeetCode 劍指offer——從上到下列印二叉樹 II、從上到下列印二叉樹 IIILeetCode二叉樹
- 《劍指offer》:[61]按之字形順序列印二叉樹二叉樹
- 層序遍歷樹的節點,佇列實現佇列
- 檢驗一顆樹是不是另一顆樹的子結構
- 二叉樹的按層遍歷二叉樹
- 二叉樹的層序遍歷二叉樹
- 演算法學習記錄三(C++)--->從尾到頭列印連結串列每個節點的值演算法C++
- 根據二叉樹的先序序列和中序序列還原二叉樹並列印後序序列二叉樹
- 二叉樹的四種遍歷方法:先序,中序,後序,層序二叉樹
- 如何列印一棵樹(Java)Java
- 層序遍歷二叉樹二叉樹
- 如何點選一個按鈕實現列印
- 支援逐層載入的HTML樹元件HTML元件
- 從命令列中列印(轉)命令列
- 從後端到前端之Vue(三)小結以及一顆真實的大樹後端前端Vue
- 建立二叉樹:層次遍歷--樹的寬度高度,後序遍歷--祖先節點二叉樹
- 資料結構實驗六是否同一顆二叉樹資料結構二叉樹
- 迴圈實現從一個陣列中按順序任意擷取幾個字元。陣列字元
- 劍指 Offer 32 - III. 從上到下列印二叉樹 III二叉樹
- 列印二叉樹的所有路徑二叉樹
- 樹套樹從入門到去世