題目:從上往下列印出二叉樹的每個結點,同一層的結點按照從左到右的順序列印。例如輸入下圖中的二叉樹,則依次列印出8、6、10、5、7、9、11。二叉樹節點的定義如下,採用c#語言描述:
public這道題實質是考查樹的層次遍歷(廣度優先遍歷)演算法:class
binarytreenode
public binarytreenode leftchild
public binarytreenode rightchild
public binarytreenode(int
data)
public binarytreenode(int
data, binarytreenode left, binarytreenode right)
}
每一次列印乙個結點的時候,如果該結點有子結點,則把該結點的子結點放到乙個佇列的末尾。接下來到佇列的頭部取出最早進入佇列的結點,重複前面的列印操作,直至佇列中所有的結點都被列印出來為止。
擴充套件:如何廣度優先遍歷乙個有向圖?這同樣也可以基於佇列實現。樹是圖的一種特殊退化形式,從上到下按層遍歷二叉樹,從本質上來說就是廣度優先遍歷二叉樹。
static本次測試封裝了幾個輔助測試的方法,實現如下:void
printfromtoptobottom(binarytreenode root)
queue
queue = new queue();
queue.enqueue(root);
while (queue.count > 0
) \t
", printnode.data);
if (printnode.leftchild != null
)
if (printnode.rightchild != null
) }}
staticview codevoid testportal(string
testname, binarytreenode root)
begins:
", testname);
}console.writeline(
"the nodes from top to bottom, from left to right are:");
printfromtoptobottom(root);
console.writeline("\n
");}
static
void
setsubtreenode(binarytreenode root, binarytreenode lchild, binarytreenode rchild)
root.leftchild =lchild;
root.rightchild =rchild;
}static
void
clearuptreenode(binarytreenode root)
}
//10
/// \
//6 14
///\ /\
//4 8 12 16
static
void
test1()
//5///
//4///
//3///
//2///
//1static
void
test2()
//1//\
//2//\
//3//\
//4//\
//5static
void
test3()
//樹中只有1個結點
static
void
test4()
//樹中木有結點
出處:
劍指offer面試題21
面試題21 包含min函式的棧 題目 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 預備知識 棧的定義 模板函式 思路 面對乙個複雜的問題,我們可以舉幾個具體的例子來尋找規律,對於本題目,我們可以通過舉例來分析它...
劍指offer 面試題32 從上到下列印二叉樹
不分行從上到下列印二叉樹 從上到下列印出二叉樹的每個節點,同一層的節點按照從左到右的順序列印。class binarytreenode 使用佇列來完成,列印的同時也在往裡面加入。public void fun binarytreenode root queue queue newlinkedlist...
劍指offer 面試題21 相關
題目 設計包含min函式的棧,pop push min 的時間複雜度均為o 1 自己所寫 如下 寫 棧 的 還是有些不熟練!include using namespace std const int max 100 class stack stack stack stack stack bool s...