欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript算法實例之求二叉樹從根到葉的所有路徑和

 更新時間:2023年10月26日 09:49:30   作者:ysheep  
如果你希望求某一特定路徑(例如從根到葉子)上數(shù)字的和,那么問題就轉變?yōu)榱恕扒蠖鏄鋸母饺~的所有路徑和”,所以本文給大家介紹了如何使用JavaScript求二叉樹從根到葉的所有路徑和,需要的朋友可以參考下

例如,考慮下面的二叉樹:

        5
      /   \
     3     8
    / \   / \
   1   4 7   9
5 -> 3 -> 1  為 531
5 -> 3 -> 4  為 534
5 -> 8 -> 7  為 587
5 -> 8 -> 9  為 589

這四個路徑的和為:531 + 534 + 587 + 589 = 2241。

為了解決這個問題,你可以使用深度優(yōu)先搜索 (DFS) 來遍歷每一條路徑,并在遍歷過程中累計路徑的和:

class TreeNode {
  constructor(value) {
    this.value = value;
    this.left = null;
    this.right = null;
  }
}

function sumPaths(node, currentSum = 0) {
  if (!node) return 0;

  currentSum = currentSum * 10 + node.value;

  // 如果是葉子節(jié)點,直接返回當前和
  if (!node.left && !node.right) return currentSum;

  // 否則返回左右子樹的和
  return sumPaths(node.left, currentSum) + sumPaths(node.right, currentSum);
}

// 使用上面的樹作為示例
const root = new TreeNode(5);
root.left = new TreeNode(3);
root.right = new TreeNode(8);
root.left.left = new TreeNode(1);
root.left.right = new TreeNode(4);
root.right.left = new TreeNode(7);
root.right.right = new TreeNode(9);

console.log(sumPaths(root)); // 輸出: 2241

深度優(yōu)先搜索(Deep First Search,簡稱 DFS)是一種用于遍歷或搜索樹或圖的算法。在樹或圖上進行搜索的過程中,DFS 盡可能沿著分支深入到樹或圖的盡頭,然后再回溯至其他分支繼續(xù)探索,直到已經(jīng)訪問過所有可能的路徑。

工作原理:

  • 從起始節(jié)點開始。
  • 探索盡可能深的分支。
  • 如果當前節(jié)點沒有未探索的分支,則回溯。
  • 探索下一個分支。
  • 重復以上步驟,直到訪問所有的節(jié)點。

實現(xiàn):

DFS 可以通過遞歸或使用堆棧實現(xiàn)。

遞歸實現(xiàn):

在樹的情況下,可以遞歸地訪問每個節(jié)點的子節(jié)點。

function dfs(node) {
  if (node == null) return;

  console.log(node.value);  // 處理當前節(jié)點
  dfs(node.left);  // 遞歸訪問左子節(jié)點
  dfs(node.right);  // 遞歸訪問右子節(jié)點
}

使用堆棧實現(xiàn):

堆??梢詭椭4娲L問的節(jié)點。一般在圖中使用堆棧實現(xiàn) DFS,因為圖可能含有循環(huán),需要一個額外的數(shù)據(jù)結構來跟蹤已訪問的節(jié)點。

function dfs(graph, start) {
  let stack = [];
  let visited = new Set();

  stack.push(start);

  while (stack.length) {
    let node = stack.pop();
    if (!visited.has(node)) {
      console.log(node);  // 處理當前節(jié)點
      visited.add(node);

      // 添加未訪問的鄰接節(jié)點到堆棧
      for (let neighbor of graph[node]) {
        if (!visited.has(neighbor)) {
          stack.push(neighbor);
        }
      }
    }
  }
}

用途:

  • 在圖中尋找路徑。
  • 拓撲排序。
  • 查找圖中的連通分量。
  • 解決一些組合問題,如尋找所有可能的解決方案。
  • 在某些情況下用于尋找最優(yōu)解。

注意:

在使用 DFS 時,需要注意避免重復訪問已經(jīng)訪問過的節(jié)點,尤其是在圖中,因為圖可能包含循環(huán)。為此,可以使用一個集合或其他數(shù)據(jù)結構來跟蹤已訪問的節(jié)點。

以上就是JavaScript算法實例之求二叉樹從根到葉的所有路徑和的詳細內容,更多關于JavaScript求二叉樹所有路徑和的資料請關注腳本之家其它相關文章!

相關文章

最新評論