首页 > 其他分享 >144. 二叉树的前序遍历

144. 二叉树的前序遍历

时间:2023-01-05 22:00:19浏览次数:68  
标签:144 TreeNode cur int res 前序 traversal 二叉树 root

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)
}

标签:144,TreeNode,cur,int,res,前序,traversal,二叉树,root
From: https://www.cnblogs.com/suehoo/p/17028949.html

相关文章

  • 144. 二叉树的前序遍历
    144.二叉树的前序遍历难度简单965收藏分享切换为英文接收动态反馈给你二叉树的根节点root,返回它节点值的前序遍历。示例1:输入:root=[1,null,2,3]输出:[1,2,3]......
  • 145. 二叉树的后序遍历
    145.二叉树的后序遍历难度简单965收藏分享切换为英文接收动态反馈给你一棵二叉树的根节点root,返回其节点值的后序遍历。示例1:输入:root=[1,null,2,3]输出:[3,2......
  • 94. 二叉树的中序遍历
    94.二叉树的中序遍历难度简单1649收藏分享切换为英文接收动态反馈给定一个二叉树的根节点root,返回它的中序遍历。示例1:输入:root=[1,null,2,3]输出:[1,3,2]......
  • 每日算法之二叉树中和为某一值的路径(三)
    JZ84二叉树中和为某一值的路径(三)题目给定一个二叉树root和一个整数值sum,求该树有多少路径的的节点值之和等于sum。1.该题路径定义不需要从根节点开始,也不需要在......
  • 力扣144 94 145 二叉树的前中后序遍历
    递归三要素:(1)确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数,并且还要明确每次递归的返回值是什么进而确定递归函数......
  • 二叉树遍历
    二叉树遍历递归遍历前序voidpreOrder(BTreeroot){if(root==NULL)return;visit(root);preOrder(root->left);preOrder(root->right);......
  • 4 二叉树
      满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。深度为k,有2^k-1个节点的二叉树。完全二叉树:在完全二叉树......
  • leetcode-144-easy
    BinaryTreePreorderTraversalGiventherootofabinarytree,returnthepreordertraversalofitsnodes'values.Example1:Input:root=[1,null,2,3]Out......
  • C#遍历二叉树
    最近看了一些关于二叉树的文章,于是学习了一下C#遍历二叉树的几种方式,特记录如下二叉树,是一种数据结构,它是一种非线性的数据结构.这里的非线性是相对于线性数据结构而言......
  • 每日算法之把二叉树打印成多行
    JZ78把二叉树打印成多行题目给定一个节点数为n二叉树,要求从上到下按层打印二叉树的val值,同一层结点从左至右输出,每一层输出一行,将输出的结果存放到一个二维数组中......