題目:輸入乙個整數和一棵二元樹。
從樹的根結點開始往下訪問一直到葉結點所經過的所有結點形成一條路徑。
列印出和與輸入整數相等的所有路徑。
例如 輸入整數22和如下二元樹
10
/ \
5 12
/ \
4 7
則列印出兩條路徑:10, 12和10, 5, 7。
先序遍歷樹即可得到結果。
void findpath
(
bstreenode* ptreenode, // a node of binary tree
int expectedsum, // the expected sum
std::vector& path, // a path from root to current node
int& currentsum // the sum of path
)
findpath(ptreenode->m_pleft, expectedsum, path, currentsum);
findpath(ptreenode->m_pright, expectedsum, path, currentsum);
//回溯
currentsum -= ptreenode->m_nvalue;
path.pop_back();
}
回溯,遍歷!!
二叉樹中和為某一值的路徑
include include using namespace std struct node void find path node r,int exceptedsum,vector path,int cursum node buildbtree int a,int i void preorder...
二叉樹中和為某一值的路徑
要輸出所有的路徑,必須額外用乙個棧來儲存當前路徑資訊。當訪問到節點a時,節點a的資訊要在訪問a的左右子樹時用到,因而,該資訊必須在遍歷a的左右子樹前加入到棧中,而在遍歷完a的左右子樹後從棧中移除。每訪問乙個節點,就計算當前路徑值 可直接利用父節點的路徑值 當其等於給定值且當前節點是葉子節點時,就列印...
二叉樹中和為某一值的路徑
面試題25 二叉樹中和為某一值的路徑 struct binarytreenode int value binarytreenode pleft binarytreenode pright 分析 用先序遍歷的方式遍歷二叉樹,初始時路徑為空。訪問乙個結點時若不到葉子結點且結點的和小於這個值那麼就把這個結...