257. 二叉樹的所有路徑
給定乙個二叉樹,返回所有從根節點到葉子節點的路徑。
說明: 葉子節點是指沒有子節點的節點。
示例:
輸入:1/\解釋: 所有根節點到葉子節點的路徑為: 1->2->5, 1->323\5
輸出: [
"1->2->5
", "
1->3
"]
解題:1. root == null 直接return
2. 判斷我們的路徑是否到達到乙個葉子節點中 if(root.left==null && root.right == null) 說明我們到達了乙個節點 直接res.push(root.val) 然後返回當前值
3. 我們遞迴 呼叫binarytreepaths(root.left) 返回左子樹上滿足條件的所有路徑 ,遍歷獲得的路徑 res.push(root.val+'->' lefts[i]) 這樣我們就獲得了我們左子樹上的所有路徑;
4.同樣方法獲取右邊的所有路徑
/*437. 路徑總和 iii* * definition for a binary tree node.
* function treenode(val) */
/*** @param root
* @return */
var binarytreepaths =function(root)
if(root.left==null && root.right == null
) let lefts =binarytreepaths(root.left)
for(let i=0;i)
let rights =binarytreepaths(root.right)
for(let i=0;i)
return
res};
給定乙個二叉樹,它的每個結點都存放著乙個整數值。
找出路徑和等於給定數值的路徑總數。
路徑不需要從根節點開始,也不需要在葉子節點結束,但是路徑方向必須是向下的(只能從父節點到子節點)。
二叉樹不超過1000個節點,且節點數值範圍是 [-1000000,1000000] 的整數。
示例:
root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8解題:10/\
5 -3
/\ \32
11/\ \
3 -2
1返回
3。和等於 8
的路徑有:
1. 5 -> 3
2. 5 -> 2 -> 1
3. -3 -> 11
1.我們的主函式每次求解需要求解node node.left和node.right 求解node又需要求解其子函式findpath(sum) 和findpath(sum.left)和findpath(sum.right)
2.在findpath中由於node.val 存在負值所以我們不能直接求res = 1 需要 res+=1
3.我們用 findpath(root,sum); 求出從根節點出發所有可能的路徑
4. 我們在分別從 pathsum(root.left,sum) pathsum(root.right,sum) 從左右節點出發滿足條件的路徑
/*235. 二叉搜尋樹的最近公共祖先* * definition for a binary tree node.
* function treenode(val, left, right) */
/*** @param root
* @param sum
* @return */
var pathsum =function(root, sum)
let res = 0
if(node.val ==num)
res += findpath(node.left,num -node.val);
res += findpath(node.right,num -node.val);
return
res }
};
給定乙個二叉搜尋樹, 找到該樹中兩個指定節點的最近公共祖先。
例如,給定如下二叉搜尋樹: root = [6,2,8,0,4,7,9,null,null,3,5]
示例 1:
輸入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8解題:1.二叉搜尋樹滿足,其任意左節點小於右節點,輸出:
6解釋: 節點
2 和節點 8 的最近公共祖先是 6。
2.當p和q分別在根節點的左邊和右邊時 根節點及為最近公共祖先
3.當 root.val>p.val && root.val>q.val 在root的左子樹中尋找
4.當root.val
/*二叉樹的js內容我們就先介紹到這裡* * definition for a binary tree node.
* function treenode(val) */
/*** @param root
* @param p
* @param q
* @return */
var lowestcommonancestor =function(root, p, q)
if(root.val>p.val && root.val>q.val)
if(root.valq.val)
return
root
};
前端程式設計師學好演算法系列(十)動態規劃
動態規劃整體思路是用遞迴問題求解,然後對遞迴過程中存在的大量重疊子問題進行優化,自頂向下的求解的思路為記憶化搜尋,自底向上的解決問題的思想就是動態規劃,自頂向下的求解通常更好理解,我們理解後在改成自底向上的動態規劃求解 劍指 offer 10 i.斐波那契數列 寫乙個函式,輸入 n 求斐波那契 fi...
演算法系列之二叉樹
資料結構中有一種結構是樹,不過一般我們常見的是樹中的一種特殊型別 二叉樹。二叉樹簡單來說就是每個節點最多有兩個子節點。如果每個節點都有兩個子節點,那麼我們稱這種二叉樹為滿二叉樹。還有一種二叉樹,其葉子節點都在最底下兩層,最後一層葉子節點都靠左排列,並且除了最後一層,其他層的葉子節點都要達到最大,這種...
小蠢魚演算法系列之二叉樹排序
package com.foolfish.tree desc 二叉樹演算法 author foolfish.chen public class binarytree return the nodevalue public int getnodevalue param nodevalue the no...