• 0257二叉树的所有路径 Marathon


    给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

    叶子节点 是指没有子节点的节点。

    示例 1:

    输入:root = [1,2,3,null,5]
    输出:["1->2->5","1->3"]
    示例 2:

    输入:root = [1]
    输出:["1"]

    提示:

    树中节点的数目在范围 [1, 100] 内
    -100 <= Node.val <= 100

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/binary-tree-paths

    参考:

    python

    # 0257.二叉树的所有路径
    class Solution:
        def binaryTreePaths(self, root: TreeNode) -> [str]:
            path = []
            res = []
            def backtrace(root, path):
                if not root:
                    return
                path.append(root.val)
                if not root.left and not root.right:
                    res.append(path[:])
                ways = []
                if root.left:
                    ways.append(root.left)
                if root.right:
                    ways.append(root.right)
                for way in ways:
                    backtrace(way, path)
                    path.pop()
            backtrace(root, path)
            return [ "->".join(list(map(str, i))) for i in res ]
    
        def binaryTreePaths_DFS(self, root: TreeNode) -> [str]:
            def construct_paths(root, path):
                if root:
                    path += str(root.val)
                    if not root.left and not root.right: # 叶子结点
                        paths.append(path) # 路径加入结果集
                    else: # 非叶子节点,继续递归
                        path += "->"
                        construct_paths(root.left, path)
                        construct_paths(root.right, path)
            paths = []
            construct_paths(root, "")
            return paths
    
        def binaryTreePaths_BFS(self, root: TreeNode) -> [str]:
            paths = []
            if not root:
                return paths
            from collections import deque
            node_queue = deque([root])
            path_queue = deque([str(root.val)])
    
            while node_queue:
                node = node_queue.popleft()
                path = path_queue.popleft()
    
                if not node.left and not node.right:
                    paths.append(path)
                else:
                    if node.left:
                        node_queue.append(node.left)
                        path_queue.append(path + "->" + str(node.left.val))
    
                    if node.right:
                        node_queue.append(node.right)
                        path_queue.append(path + "->" + str(node.right.val))
            return paths
    

    golang

    package binaryTree
    
    import "strconv"
    
    func binaryTreePaths(root *TreeNode) []string {
    	res := make([]string, 0)
    	var travel func(node *TreeNode, s string)
    	travel= func(node *TreeNode, s string) {
    		if node.Left == nil && node.Right == nil {
    			v := s + strconv.Itoa(node.Val)
    			res = append(res, v)
    			return
    		}
    		s = s + strconv.Itoa(node.Val) + "->"
    		if node.Left != nil {
    			travel(node.Left, s)
    		}
    		if node.Right != nil {
    			travel(node.Right, s)
    		}
    	}
    	travel(root, "")
    	return res
    }
    
    func binaryTreePathsDFS(root *TreeNode) []string {
    	paths := []string{}
    	construcPaths(root, "")
    	return paths
    }
    
    func construcPaths(root *TreeNode, path string)  {
    	if root != nil {
    		pathSB := path
    		pathSB += strconv.Itoa(root.Val)
    		if root.Left == nil && root.Right == nil {
    			paths = append(paths, pathSB)
    		} else {
    			pathSB += "->"
    			construcPaths(root.Left, pathSB)
    			construcPaths(root.Right, pathSB)
    		}
    	}
    }
    
    func binaryTreePathsBFS(root *TreeNode) []string {
    	paths := []string{}
    	if root == nil {
    		return paths
    	}
    	nodeQueue := []*TreeNode{}
    	pathQueue := []string{}
    	nodeQueue = append(nodeQueue, root)
    	pathQueue = append(pathQueue, strconv.Itoa(root.Val))
    
    	for i:=0;i<len(nodeQueue);i++ {
    		node, path := nodeQueue[i], pathQueue[i]
    		if node.Left == nil && node.Right == nil {
    			paths = append(paths, path)
    			continue
    		}
    		if node.Left != nil {
    			nodeQueue =append(nodeQueue, node.Left)
    			pathQueue = append(pathQueue, path + "->" +strconv.Itoa(node.Left.Val))
    		}
    		if node.Right != nil {
    			nodeQueue =append(nodeQueue, node.Right)
    			pathQueue = append(pathQueue, path + "->" +strconv.Itoa(node.Right.Val))
    		}
    	}
    	return paths
    }
    
    
  • 相关阅读:
    orale 函数大全[转] 涛
    easyuicombobox的option选项为true与false时的问题 涛
    数据库镜像转移Failover Partner 涛
    创建链接服务器 涛
    Sql Server 2008 R2 清空数据库中ldf日志文件 涛
    杂 涛
    Jquery 数组操作大全【转载】 涛
    VS2012常用快捷键 涛
    android studio集成ijkplayer Vevi
    CenOs 部署记录 Vevi
  • 原文地址:https://www.cnblogs.com/davis12/p/15554043.html
Copyright © 2020-2023  润新知