leetcode 路徑總和系列(1,2,3,4)

2021-09-25 23:23:39 字數 2559 閱讀 8388

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

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

方法1:簡單的dfs即可

方法2:迭代。

用先序遍歷,但是遍歷到的每個節點它的左右子結點都需要加上其父結點值,再壓入棧中。這樣當遍歷到葉結點時,如果和sum相等了,那麼就說明一定有一條從root過來的路徑。

// dfs

class solution

bool dfs(treenode* root,int cur,int target)

};// 迭代 先序遍歷

class solution };

while (!st.empty())

if (t->right)

if (t->left)

}return false;

}};

給定乙個二叉樹和乙個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。

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

dfs

class solution ;

vector> res;

vectorout;

dfs(root,0,sum,res,out);

return res;

}void dfs(treenode *root, int cur,int target,vector> &res,vector&out)

dfs(root->left,cur,target,res,out);

dfs(root->right,cur,target,res,out);

out.pop_back();

}};

給定乙個二叉樹,它的每個結點都存放著乙個整數值。

找出路徑和等於給定數值的路徑總數。

路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的(只能從父節點到子節點)。

二叉樹不超過1000個節點,且節點數值範圍是 [-1000000,1000000] 的整數。

方法1: 先序遍歷每個節點,求以每個節點為根(也就是起點)的符合條件的路徑 (第n層節點會被遍歷n次)

方法2:還是先序遍歷每個節點,但這次計算以每個節點為終點的,所有符合路徑的值,而該路徑上的字首和用雜湊表來存

(每個節點只需要遍歷1次)

//先序遍歷每個節點,但這次計算以每個節點為終點的,所有符合路徑的值

class solution

// 依舊先序遍歷每個節點,但是這次遍歷到每個節點的時候,求以該節點為終點的,所有符合路徑的值

// 而字首和通過pre來儲存,相當於用空間換了時間

void dfs(treenode* root,int cur,int target,

unordered_map& pre,int &res)

};// 一開始的**

class solution

//先序遍歷每個節點,dfs求 以每個節點為根的符合要求的路徑

void helper(treenode* root,int target,int &res)

void dfs(treenode* root,int cur,int target,int &res)

};

對於一棵深度小於 5 的樹,可以用一組三位十進位制整數來表示。

對於每個整數:

百位上的數字表示這個節點的深度 d,1 <= d <= 4。

十位上的數字表示這個節點在當前層所在的位置 p, 1 <= p <= 8。位置編號與一棵滿二叉樹的位置編號相同。

個位上的數字表示這個節點的權值 v,0 <= v <= 9。

給定乙個包含三位整數的公升序陣列,表示一棵深度小於 5 的二叉樹,請你返回從根到所有葉子結點的路徑之和。

樣例 1:

輸入: [113, 215, 221]

輸出: 12

解釋: 

這棵樹形狀如下:

3/ \

5   1

路徑和 = (3 + 5) + (3 + 1) = 12.

雖然給的不是根節點,但是我們可以通過給每個節點編號的方式來找到他對應的左右兒子,具體辦法是用乙個雜湊表儲存下標到節點值的對映,而每個節點的下標是按照層序乙個滿二叉樹的方式來建立的,所以下標為k的左右兒子的下標為2k 和 2k+1。

class solution 

int res=0;

dfs(1,0,res,dict);

return res;

}void dfs(int index,int cur,int& res,unordered_map&dict)

dfs(2*index,cur,res,dict);

dfs(2*index+1,cur,res,dict);

}};

LeetCode 路徑總和

給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 1 如下 definition for a binary tree nod...

LeetCode 路徑總和

給定乙個二叉樹,它的每個結點都存放著乙個整數值。找出路徑和等於給定數值的路徑總數。路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的 只能從父節點到子節點 二叉樹不超過1000個節點,且節點數值範圍是 1000000,1000000 的整數。示例 root 10,5,3,3,2...

leetcode 路徑總和II(python)

題目 給定乙個二叉樹和乙個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 5 1返回 5,4,11,2 5,8,4,5 思想 二叉樹深度遍歷 回溯 class so...