題目描述:
輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點 所經過的結點形成一條路徑。
思路:
當用前序遍歷的方式訪問到某一節點時,我們把這個節點新增到路徑上,並累加該節點的值,如果該節點為葉子節點並且路徑中節點值的和剛好等於輸入的整數,則當前的路徑符合要求,我們把它列印出來。如果當前節點不是葉節點,則繼續訪問它的子節點。當前節點訪問結束後,遞迴函式將自動回到它的父節點。因此我們在函式退出之前要在路徑上刪除當前節點,並減去當前節點的值,以確保返回父節點時路徑剛好是從根節點到父節點的路徑。不難看出儲存路徑的資料結構實際上是乙個棧,因為路徑要與遞迴呼叫狀態一致,而遞迴呼叫的本質就是乙個壓棧和出棧的過程。
程式:
//遞迴版本
/*struct treenode
};*/
class solution else
listtemp.pop_back(); //深度遍歷完一條路徑回退
}vector
> findpath(treenode* root,int expectnumber)
};
二叉樹中和為某一值的路徑
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 分析 用先序遍歷的方式遍歷二叉樹,初始時路徑為空。訪問乙個結點時若不到葉子結點且結點的和小於這個值那麼就把這個結...