二叉樹全部路徑

2022-07-02 15:42:13 字數 1328 閱讀 7717

今天在力扣上看到一道題,找出二叉樹中所有的路徑再返回。

題目如下:

給定乙個二叉樹,返回所有從根節點到葉子節點的路徑。

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

示例:

輸入:

1

/   \

2     3

\

5

輸出: ["1->2->5", "1->3"]

解釋: 所有根節點到葉子節點的路徑為: 1->2->5, 1->3

題意已經很清晰了,從根節點到葉子節點算一條路徑,讀題的時候沒看到,草草看了一眼就開始幹,結果自己分析了半天,最終大約猜測是這麼回事... ...也是夠了... ...

一看到二叉樹就想到遞迴來解,這道題顯然需要遍歷二叉樹所有節點,葉子節點的特徵也很明顯,那就是左右子節點都為null,這也是結束遞迴的條件。

由於需要拼接字串,我開始的設想是傳乙個stringbuilder下去,但是發現實現起來比較麻煩,而且完全沒有這種必要,只要在查到葉子節點時,進行構建字串即可。

所以我選擇了傳乙個列表作為遞迴函式的引數,每一次向下遞迴都將節點插入列表,每一次返回上一層遞迴都減去剛才插入的節點,這樣不會亂,當遇到葉子節點時,遍歷列表構建字串,然後再清空stringbuilder。

/**

* definition for a binary tree node.

* public class treenode

* } */

class

solution

public

void findpath(treenode root, listres)

if (root.right != null

)

if (root.left == null && root.right == null

) else

}results.add(builder.tostring());

builder.delete(0, builder.length());

}res.remove(res.size() - 1);

}}

接下來考慮完正常情況就要思考特殊情況了,如果傳了乙個空的二叉樹該怎麼處理?這一點我在遞迴前做了判斷,直接返回空的list即可。

二叉樹 路徑

二叉樹中,從根節點到葉節點的每一條連線,我們稱之為路徑,最短路徑和最長路徑在之前的部落格中,我們已經完成了對他們的討論,現在我們討論一下,輸出一棵二叉樹中全部的路徑資訊。如下所示 public class operation childbinarytreepath root,return resul...

二叉樹 和為定值的全部路徑

題目描述 給定一棵二叉樹和乙個定值sum,要求得到二叉樹中從根節點開始到某個葉節點結束的所有路徑使得路徑上所有結點值的和與sum相等.分析 可以使用先序遍歷的方法,遞迴的遍歷整棵樹。struct treenode void func treenode root,int sum,int cur,vec...

Binary Tree Paths二叉樹路徑

問題描述 given a binary tree,return all root to leaf paths.給定乙個二叉樹,返回所有從根節點到葉子節點的路徑。思路 深度優先遍歷中的前序遍歷 給定子樹,先訪問根節點,再訪問左節點,最後訪問右節點 非遞迴的實現方式通過堆疊輔助。由於題目要求返回所有 根...