回溯 二叉樹求和的所有路徑

2021-06-19 07:47:27 字數 1231 閱讀 7340

二叉樹求和的所有路徑,比如

例如 輸入整數22和如下二元樹

10/ \

5   12

/ \4   7

則列印出兩條路徑:10,12和12,5,7

#include#include#include using namespace std;

static int sum(0);

static int count(0);

templatestruct binode

;templateclass bitree

;private:

binode*root;

void create(binode* &bt);

void release(binode*bt);

int depth(binode* bt);

int findpath(t i, binode* bt, stack*> &sta);

};template void bitree::release(binode*bt)

}//先序遍歷構建樹

template void bitree::create(binode* &bt)

}template int bitree::depth(binode* bt)

int d1 = depth(bt->lchild);

int d2 = depth(bt->rchild);

return (d1 > d2 ? d1 : d2)+ 1;

}//採用回溯法查詢路徑

template int bitree::findpath(t i, binode* bt, stack*> &sta)

sum += bt->data;

if (sum == i && bt->lchild == null && bt->rchild == null)//當求到和且左子樹和右子數都為空也就是到了葉節點時,就找到了解

cout << endl;

count ++;

} //當沒有到葉節點時,繼續找。

if (null != bt->lchild)

if (null != bt->rchild)

//回溯時,需要回到之前的狀態,所以要減去sum,並且彈棧。

sum -= bt->data;

sta.pop();

return count;

}int main()

二叉樹的所有路徑

一 問題描述 給一棵二叉樹,找出從根節點到葉子節點的所有路徑。樣例 給出下面這棵二叉樹 1 2 3 5 所有根到葉子的路徑為 1 2 5 1 3 二 解題思路 運用遞迴的思想查詢二叉樹的所有路徑,定義乙個向量用來儲存路徑,然後運用前序遍歷二叉樹,返回查詢的的路徑,在庫檔案string中,to str...

二叉樹的所有路徑

描述 給一棵二叉樹,找出從根節點到葉子節點的所有路徑。樣例 給出下面這棵二叉樹 1 2 3 5 所有根到葉子的路徑為 1 2 5 1 3 解題思路 要找到二叉樹的所有路徑,就相當於從根節點出發一直到葉子節點。我們可以在遍歷的基礎之上完成這項操作,但是又有所不同。首先從根節點出發,先遍歷它的左子樹,直...

二叉樹的所有路徑

問題描述 給一棵二叉樹,找出從根節點到葉子節點的所有路徑。樣例 給出下面這棵二叉樹 1 2 3 5所有根到葉子的路徑為 1 2 5 1 3 解題思路 若二叉樹不為空,將節點新增到向量中,左右子樹進行遞迴,通過函式呼叫然後輸出。definition of treenode class treenode...