面試題25:二叉樹中和為某一值的路徑
題目:輸入一顆二叉樹的跟節點和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。(注意: 在返回值的list中,陣列長度大的陣列靠前)
思路:路徑的模擬類似堆疊,這裡採用陣列vector儲存,push_back,pop_back模擬堆疊,為了方便讀取除了棧頂以外的其他元素。
由於先訪問根,所以採用先序遍歷。如果遍歷到葉節點,當前值與期望值兩個值不同,則每次要在返回父節點的過程中回刪除陣列中的節點。
如果當前的和與期望值相同且為葉子結點,則將當前陣列儲存到二維陣列中
這裡的難點一是在於堆疊採用的模擬,二是在兩次遞迴後面刪除堆疊尾節點,三是採用了二維陣列和一位陣列的方式進行儲存,只有確定相同的值才存放到二維陣列中。
/*
struct treenode
};*/
class solution
if(root->left!=
null
)find
(root->left,expectnumber,path,tmppath,currentsum);if
(root->right!=
null
)find
(root->right,expectnumber,path,tmppath,currentsum)
; tmppath.
pop_back()
;}public:
vectorint>
>
findpath
(treenode* root,
int expectnumber)
};
面試題25 二叉樹中和為某一值的路徑
輸入一棵二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。從根的根結點開始往下一直到葉節點 所經過的結點形成一條路徑。include include using namespace std 二叉樹結點定義 struct binarytreenode 建立二叉樹結點 binarytree...
面試題25 二叉樹中和為某一值的路徑
以先序的方式構建二叉樹,輸入 表示結點為空 void createbinarytree binarytreenode proot else void printinorder binarytreenode proot int tmain intargc,tchar argv 說明 用vector模擬...
面試題25 二叉樹中和為某一值的路徑
輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。演算法思路 先序遍歷二叉樹,並用乙個vector模擬乙個棧,記錄路徑,將訪問過的結點的值放入,遍歷的時候先計算當前路徑上結點值的總和,並將結點的值放入vecto...