/*輸入一棵二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。從根的根結點開始往下一直到葉節點
所經過的結點形成一條路徑。*/
#include #include using namespace std;
//二叉樹結點定義
struct binarytreenode
;//建立二叉樹結點
binarytreenode *createbinarytreenode(int ival)
//連線結點
void connecttreenodes(binarytreenode *proot, binarytreenode *pleft, binarytreenode *pright)
//釋放空間(運用遞迴實現,二叉樹的很多演算法都是用遞迴實現的)
void freespace(binarytreenode *onenode)
}//尋找二叉樹中和為某一值的路徑
void findpath(binarytreenode *proot, int expectedsum, vector&path, int currentsum)
//如果不是葉子結點,則遍歷它的子結點
//判斷左結點一支
if(proot -> m_pleft)
findpath(proot -> m_pleft, expectedsum, path, currentsum);//遞迴呼叫時path是同乙個
//判斷右結點一支
if(proot -> m_pright)
findpath(proot -> m_pright, expectedsum, path, currentsum);
//在返回到父節點之前先刪除當前節點,當到葉子結點後和值不滿足要求則刪除此節點,返回到父節點
path.pop_back();
}//*****=測試*******
void test(char *testname, binarytreenode *proot, int expectedsum)
//*****=測試用例*****
void test1()
int main()
面試題25 二叉樹中和為某一值的路徑
以先序的方式構建二叉樹,輸入 表示結點為空 void createbinarytree binarytreenode proot else void printinorder binarytreenode proot int tmain intargc,tchar argv 說明 用vector模擬...
面試題25 二叉樹中和為某一值的路徑
輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。演算法思路 先序遍歷二叉樹,並用乙個vector模擬乙個棧,記錄路徑,將訪問過的結點的值放入,遍歷的時候先計算當前路徑上結點值的總和,並將結點的值放入vecto...
面試題25 二叉樹中和為某一值的路徑
輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。當用先序遍歷的方式訪問某一結點時候,我們把該結點加入到當前路徑,並計算累加和。若累加和剛好等於輸入的整數,並且該節點為葉子節點,那麼當前路徑符合要求。如果當前節...