求star

开源不易,喜欢请点个star吧

Ocean Han
464 字
2 分钟
Leetcode->二叉数的所有路径
2022-07-18

题目#

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

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

示例 1:

img

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

示例 2:

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

提示:

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

解题:key:#

①深度优先搜索#

TIP

​ 对二叉树进行深搜遍历:

  • 如果此节点不是叶子结点,则将它加入到路径当中,继续遍历
  • 如果此节点是叶子结点,则从根节点到此节点经过的路径满足题意,加入答案中
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {string[]}
 */

var binaryTreePaths = function (root) {
    const paths = []
    var findLeafNode = (root, path) => {
        if (root) {
            path += root.val.toString()
            if (!root.left && !root.right) {
                paths.push(path)
            } else {
                path += '->'
                findLeafNode(root.left, path)
                findLeafNode(root.right, path)
            }
        }
    }
    findLeafNode(root,"")
    return paths
};

②广度优先搜索#

TIP

​ 维护两个队列,一个存储节点,另一个存储根节点到该节点的路径

​ 循环出队,如果它是叶子节点,则将它对应的路径加入到答案中。如果它不是叶子节点,则将它的所有孩子节点加入到队列的末尾。当队列为空时广度优先搜索结束

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {string[]}
 */
var binaryTreePaths = function(root) {
    const paths = []
    const node_queue = [root]
    const path_queue = [root.val.toString()]

    while(node_queue.length){
        let node = node_queue.shift()
        let path = path_queue.shift()

        if(!node.left && !node.right){
            paths.push(path)
        }else{
            if(node.left) {
                node_queue.push(node.left)
                path_queue.push(path + '->'+node.left.val)
            }
            if(node.right) {
                node_queue.push(node.right)
                path_queue.push(path + '->'+node.right.val)
            }
        }
    }
    return paths
};
Leetcode->二叉数的所有路径
https://blog.oceanh.top/posts/algorithm/二叉树的所有路径/
作者
Ocean Han
发布于
2022-07-18
许可协议
CC BY-NC-SA 4.0
最后修改时间
2024-08-10 10:08:49