每日一題之 非遞迴後序遍歷列印二叉樹所有路徑

2021-08-29 10:01:14 字數 818 閱讀 4905

描述

給乙個二叉樹,列印其所有路徑

利用後序非遞迴遍歷,因為後序非遞迴遍歷的特性,對於每次訪問的節點,棧裡面存的元素都是當前節點的祖先,所以只要判斷當前節點是不是葉子節點,如果是葉子節點,那麼將棧中元素取出,和當前葉子節點組成一條路徑。

#include

using

namespace std;

struct node

node()

};node*

build()

return root;

}void

visit

(node* p)

void

postvis

(node* root)

}void

postordervis

(node* root)

else

else

visit

(now.first);}

}}cout << endl;

for(

int i =

0; i <

(int

)a.size()

;++i)

cout << endl;}}

void

solve()

intmain()

/*abdg###e#h##cf###

*//* 樹的結構

a/ \

b c

/ \ /

d e f

/ \

g h

*/

每日一題 列印沙漏

本題要求你寫個程式把給定的符號列印成沙漏的形狀。例如給定17個 要求按下列格式列印 所謂 沙漏形狀 是指每行輸出奇數個符號 各行符號中心對齊 相鄰兩行符號數差2 符號數先從大到小順序遞減到1,再從小到大順序遞增 首尾符號數相等。給定任意n個符號,不一定能正好組成乙個沙漏。要求列印出的沙漏能用掉盡可能...

每日一題 32 二叉樹的後序遍歷

給定乙個二叉樹,返回它的 後序 遍歷。示例 輸入 1,null,2,3 1 2 3 輸出 3,2,1 高階 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?遞迴演算法 解答 definition for a binary tree node.struct treenode class solution...

二叉樹三種遍歷非遞迴實現 每日一題

前序遍歷 根據前序遍歷訪問的順序,優先訪問根結點,然後再分別訪問左孩子和右孩子。即對於任一結點,其可看做是根結點,因此可以直接訪問,訪問完之後,若其左孩子不為空,按相同規則訪問它的左子樹 當訪問其左子樹時,再訪問它的右子樹。因此其處理過程如下 對於任一結點p 1 訪問結點p,並將結點p入棧 2 判斷...