[112].路徑總和

 


題目

給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。

說明: 葉子節點是指沒有子節點的節點。

示例:

給定如下二叉樹,以及目標和 sum = 22,

              5
             / \
            4   8
           /   / \
          11  13  4
         /  \      \
        7    2      1

返回 true,因爲存在目標和爲 22 的根節點到葉子節點的路徑 5->4->11->2。
 


函數原型

C的函數原型:

bool hasPathSum(struct TreeNode* root, int sum){}

 


邊界判斷

bool hasPathSum(struct TreeNode* root, int sum){
	if( root == NULL )
		return false;
}

 


算法設計:遞歸

bool hasPathSum(struct TreeNode* root, int sum){
	if( root == NULL )		// 空樹
		return false;
		
	if( root->left == NULL && root->right == NULL )	// 走到葉子🍃結點(無孩子)
		return (root->val - sum) == 0;	
		
	return hasPathSum(root->left, sum - root->val) 
        || hasPathSum(root->right, sum - root->val);
}
  • 時間複雜度:Θ(n)\Theta(n)
  • 空間複雜度:Θ(n)\Theta(n)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章