題目描述:輸入一顆二叉樹和乙個整數,列印出二叉樹中節點值的和為輸入整數的所有路徑。從樹的根節點開始往下一直到葉節點所經過的節點形成一條路徑。
二叉樹結點定義:
//二叉樹定義
struct bintreenode;
解題思路:
首先要明白,路徑指的是以根節點為起點至葉節點。
由於以根為起始點,所以我們需要用到前序遍歷。
把經過的路徑上的節點儲存下來。每訪問到乙個節點的時候,我們都把當前的節點新增到路徑中去。
到葉節點時計算值。
再遍歷其他節點,遍歷下一節點前要回溯。
回溯時刪除當前結點並減去當前節點值。
測試用例:
int main()
函式實現:
//輔助函式,核心過程
void findpath(bintreenode *proot, int expectedsum, std::vector
&path, int currentsum)
//如果不是葉節點,則遍歷它的子節點
if(proot->left != null)
findpath(proot->left, expectedsum, path, currentsum);
if(proot->right != null)
findpath(proot->right, expectedsum, path, currentsum);
//在返回父節點之前,在路徑上刪除當前結點
path.pop_back();
}//主函式
void findpath(bintreenode *proot, int expectedsum)
其他函式:
//其他函式實現
//建立根節點,值為e
bintreenode* bintreenode::createroot(int e)
//作為節點的左孩子插入元素e
void bintreenode::insertaslc(int e)
//作為節點的右孩子插入元素e
void bintreenode::insertasrc(int e)
二叉樹中和為某一值的路徑
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 分析 用先序遍歷的方式遍歷二叉樹,初始時路徑為空。訪問乙個結點時若不到葉子結點且結點的和小於這個值那麼就把這個結...