144. 二叉树的前序遍历

144. 二叉树的前序遍历#

难度简单965收藏分享切换为英文接收动态反馈

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

示例 1:

img

输入:root = [1,null,2,3]
输出:[1,2,3]

示例 2:

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

示例 3:

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

示例 4:

img

输入:root = [1,2]
输出:[1,2]

示例 5:

img

输入:root = [1,null,2]
输出:[1,2]

提示:

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

进阶:递归算法很简单,你可以通过迭代算法完成吗?

方法一

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func preorderTraversal(root *TreeNode) []int {
    res:=&result{
        res: []int{},
    }
    traversal(root,res)
    return res.res
}

type result struct{
    res []int
}

func traversal(cur *TreeNode,res *result){
    if cur==nil{
        return
    }
    res.res=append(res.res,cur.Val)
    traversal(cur.Left,res)
    traversal(cur.Right,res)
}

方法二

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func preorderTraversal(root *TreeNode) []int {
    var res []int
    var traversal func(node *TreeNode)
    traversal=func(node *TreeNode){
        if node==nil{
        return
        }
        res=append(res,node.Val)
        traversal(node.Left)
        traversal(node.Right)
    }
    traversal(root)
    return res
}


方法三:

由于append扩容之后地址会变化,这就是方法一为什么要用结构体包装res []int的原因。

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func preorderTraversal(root *TreeNode) []int {
    var res []int
    traversal(root,res)
    return res
}



func traversal(cur *TreeNode,res []int) {
    if cur==nil{
        return 
    }
    res=append(res,cur.Val)
    traversal(cur.Left,res)
    traversal(cur.Right,res)
}

上面代码并不能更改res里的值,要改成如下代码:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func preorderTraversal(root *TreeNode) []int {
    var res []int
    traversal(root,&res)
    return res
}



func traversal(cur *TreeNode,res *[]int) {
    if cur==nil{
        return 
    }
    *res=append(*res,cur.Val)
    traversal(cur.Left,res)
    traversal(cur.Right,res)
}

作者:suehoo

出处:https://www.cnblogs.com/suehoo/p/17028949.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   suehoo  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu