給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。
說明:葉子節點是指沒有子節點的節點。
方法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...