LeetCode——二叉树的所有路径

LeetCode——二叉树的所有路径

题目描述:
给定一个二叉树,返回所有从根节点到叶子节点的路径。

说明: 叶子节点是指没有子节点的节点。

示例:

输入:

1
/
2 3

5

输出: [“1->2->5”, “1->3”]

解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-paths
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:
我们用深度优先遍历整棵树。
定义一个栈,栈中每个节点包含了当前的树节点和当前树节点到根节点的路径。
然后我们对树进行深度优先遍历:首先弹出栈顶元素,记录下当前的树节点cur_node和路径cur_str,如果存在右子树就将右节点和路径其加入stack;同理,如果存在左子树,将左节点和路径加入stack;如果遇到叶子节点,就将当前的路径加入最终的result。

python代码:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def binaryTreePaths(self, root):
        """
        :type root: TreeNode
        :rtype: List[str]
        """
        result = []
        if root is None:
            return result
        stack = [(root, "")]
        while stack:
            current = stack.pop()
            cur_node = current[0]
            cur_str = current[1]
            if cur_node.right:
                stack.append((cur_node.right, cur_str + str(cur_node.val) + "->"))
            if cur_node.left:
                stack.append((cur_node.left, cur_str + str(cur_node.val) + "->"))
            if cur_node.left is None and cur_node.right is None:
                result.append(cur_str + str(cur_node.val))
        return result

你可能感兴趣的:(算法题,LeetCode,二叉树,leetcode,算法,数据结构)