列印二叉樹某一層的節點

2022-05-06 14:42:09 字數 2482 閱讀 9118

按層非遞迴遍歷二叉樹是一道常見的題目,程式設計之美上有乙個列印出二叉樹某一層的節點的問題,稍稍有意思。

在程式設計之美上,提到了兩種解法:

(1)一種是遞迴解法

void translevel(node* root,int

level)}}

(2)另一種則是利用佇列的非遞迴解法

如果只是簡單的按層遍歷的話,可以用乙個佇列,先將上層節點入隊,節點出隊的時候將其孩子節點入隊,這樣就可以達到按層入隊出隊的效果。

要列印出某一層,可以在出隊的時候一層一層地出,同時計算出隊的次數,就可以判斷出當前是哪一層,下面是我的**:

void translevel2(node* root,int

level)

count_levels++;

}//佇列中剩下的元素即為要列印的節點

printqueue(queue);}}

裡面用到的佇列是自己寫的,也當作乙個小練習。

完整測試**:

queue.h

#ifndef __queue_h__

#define __queue_h__#include

#define max_size 100template

class

queue

;template

queue

::queue()

:front(

0),rear(0

)template

bool queue::enqueue(const

t element)

}template

t queue

::dequeue()

}template

bool queue::isempty() const

template

bool queue::isfull() const

template

int queue::size() const

#endif /* __queue_h__ */

btree.h

#ifndef __btree_h__

#define __btree_h__

struct

node

;void buildtree(int array,int n,struct node** root,int

i);void destroytree(struct node*root);

void printtree(node*root);

int getdepth(node*root);

void translevel(node* root,int

level);

void translevel2(node* root,int

level);

#endif /* __btree_h__ */

btree.cc

#include "

btree.h

"#include

#include

#include

#include

"queue.h

"void buildtree(int array,int n,node** root,inti)}

void destroytree(node*root)

}void printtree(node*root)

}int getdepth(node*root)

}void translevel(node* root,int

level)

}}static

void printqueue(queue&queue)

}void translevel2(node* root,int

level)

count_levels++;

}printqueue(queue);}}

main.cc

#include #include 

"btree.h

"int

main()

; node* root=null;

buildtree(array,

10,&root,0

);

int depth =getdepth(root);

/*使用遞迴方法列印二叉樹的某一層

*/for(int i=1;i<=depth;i++)

translevel(root,i);

printf("\n

");/*使用非遞迴方法列印二叉樹的某一層

*/for(int i=1;i<=depth;i++)

translevel2(root,i);

printf("\n

");destroytree(root);

return0;

}

按層列印二叉樹 每行列印一層

一,問題介紹 給定一棵二叉樹,按照層序遍歷的順序列印二叉樹。但是要求,每一行列印一層資料。二,演算法分析 借助二叉樹的層序遍歷來實現 使用佇列的先入先出性質保證列印的順序 二叉樹層序遍歷參考 層序列印參考 1 public void printtree binarynoderoot 21if cur...

列印二叉樹邊界節點

class treenode def init self,val,left none right none self.val val self.left left self.right right defis leaf self return self.left is none and self.r...

二叉樹問題 列印二叉樹的邊界節點

問題 給定一棵二叉樹的頭節點,按照如下兩種標準分別實現二叉樹邊界節點的逆時針列印。標準一 1.頭節點為邊界節點 2.葉節點為邊界節點 3.如果節點在其所在層中的最左邊或最右邊,那麼也是邊界節點標準二 1.頭節點為邊界節點 2.葉節點為邊界節點 3.樹左邊界延伸下去的路徑為邊界節點 4.樹右邊界延伸下...