首页 > 编程语言 >代码随想录算法训练营第十四天 | 94. 二叉树的中序遍历,144.二叉树的前序遍历,145.二叉树的后序遍历

代码随想录算法训练营第十四天 | 94. 二叉树的中序遍历,144.二叉树的前序遍历,145.二叉树的后序遍历

时间:2024-02-06 17:12:34浏览次数:39  
标签:遍历 TreeNode res popNode bfs 第十四天 二叉树 root append

145. 二叉树的后序遍历

  已解答 简单  

相关标签

相关企业  

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 

 

示例 1:

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

示例 2:

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

示例 3:

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

 

提示:

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

 

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


type TreeNode struct { Val int Left *TreeNode Right *TreeNode }

 

func postorderTraversal(root *TreeNode) []int { var res []int bfs := []*TreeNode{root} for len(bfs) != 0 { popNode := bfs[len(bfs)-1] bfs = bfs[:len(bfs)-1] if popNode == nil { continue } res = append(res, popNode.Val) bfs = append(bfs, popNode.Left) bfs = append(bfs, popNode.Right) } i, j := 0, len(res)-1 for i < j { res[i], res[j] = res[j], res[i] i++ j-- } return res }

 

func postorderTraversalOne(root *TreeNode) []int { var res []int if root == nil { return res } res = append(res, postorderTraversal(root.Left)...) res = append(res, postorderTraversal(root.Right)...) res = append(res, root.Val) return res }

144. 二叉树的前序遍历

  已解答 简单  

相关标签

相关企业  

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

 

示例 1:

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

示例 2:

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

示例 3:

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

示例 4:

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

示例 5:

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

 

提示:

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

 

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


type TreeNode struct { Val int Left *TreeNode Right *TreeNode }

 

func preorderTraversal(root *TreeNode) []int { bfs := []*TreeNode{root} var res []int for len(bfs) != 0 { popNode := bfs[len(bfs)-1] bfs = bfs[:len(bfs)-1] if popNode == nil { continue } res = append(res, popNode.Val) bfs = append(bfs, popNode.Right) bfs = append(bfs, popNode.Left) } return res }

 

func preorderTraversalOne(root *TreeNode) []int { var res []int if root == nil { return res } res = append(res, root.Val) res = append(res, preorderTraversal(root.Left)...) res = append(res, preorderTraversal(root.Right)...) return res }

94. 二叉树的中序遍历

  已解答 简单  

相关标签

相关企业  

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

 

示例 1:

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

示例 2:

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

示例 3:

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

 

提示:

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

 

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


这里中序是用一个指针,来记录需要遍历的值, 因为中序是 左中右, 而正常的root ,第一个就是中,无法确定位置,所以 用了一个指针来记录位置, 当指针不为空时, 将树的左孩子依次压入 指针, 当指针为空时,将bfs里最后一个结点弹出, 记录结果,则将指针华向该点 的右孩子,   这里的条件 是指针与bfs不能同时为空, 如果都为空时,就是到底了   func inorderTraversal(root *TreeNode) []int { cur := root varbfs []*TreeNode varres []int for cur != nil || len(bfs) != 0 { if cur != nil { bfs = append(bfs, cur) cur = cur.Left } else { popNode := bfs[len(bfs)-1] bfs = bfs[:len(bfs)-1] res = append(res, popNode.Val) cur = popNode.Right } } return res }       func inorderTraversal(root *TreeNode) []int { node := root var bfs []*TreeNode for node != nil { bfs = append(bfs, node) node = node.Left } var res []int for len(bfs) != 0 { popNode := bfs[len(bfs)-1] bfs = bfs[:len(bfs)-1] if popNode == nil { continue } res = append(res, popNode.Val) rightNode := popNode.Right for rightNode != nil { bfs = append(bfs, rightNode) rightNode = rightNode.Left } } return res } func inorderTraversalOne(root *TreeNode) []int { if root == nil { return []int{} } var res []int res = append(res, inorderTraversal(root.Left)...) res = append(res, root.Val) res = append(res, inorderTraversal(root.Right)...) return res }

标签:遍历,TreeNode,res,popNode,bfs,第十四天,二叉树,root,append
From: https://www.cnblogs.com/suxinmian/p/18010040

相关文章

  • 一套模板搞定二叉树算法题--二叉树算法讲解004
    1、二叉树经典习题模拟忘记知识点和技巧时,遇到一个新的二叉树习题,该如何处理思考和写代码解题?1.1、leetcode965题目和题意:题解1成员变量self.ans:题解2递归回传:1.2、leetcode257该题是个经典二叉树题目题目和题意:题解:分析,所有路径,每一个叶子节点都需要到达。到......
  • 图片传输和图片防遍历技术方案
    图片传输和图片防遍历技术方案需求描述:1.如果用一个接口列表,可能报文太长了,实现URL是短期有效且防遍历的2.接口文件流,拆两个接口,一个接口返回文件列表,另一个根据文件ID返回文件流3.如果都是图片,base64通过接口来传输图片也可以。4.发送端和接收端可以对文件做MD5加密,这样可以验证......
  • leedcode 对称二叉树
    迭代法:#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution:defisSymmetric(self,root):......
  • 目录遍历(建立目录树,记录目录属性)仅适用于小样本
    directory.h#pragmaonce#include<windows.h>#include<tchar.h>#include<stdio.h>#include<tchar.h>#include<string>#include<stack>#include<codecvt>#include<vector>#defineFILE_NOT_IN_NODE-1classDirTreeNode{p......
  • 深度优先遍历例题(排列数字)
    给定一个整数n,将数字1~n排成—排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格式共一行,包含一个整数n。输出格式按字典序输出所有排列方案,每个方案占一行。数据范围1≤n≤7#include<iostream>usingnamespacestd;constintN=10;intn;int......
  • leedcode 二叉树的中序遍历
    自己写的classSolution:def__init__(self):self.res_list=list()definorderTraversal(self,root):ifroot:ifroot==None:returnelse:self.inorderTraversal(root.left)......
  • 图的遍历
    /*反向考虑,反向建图,考虑从x号点出发,可以到达哪些点,我们从n~1开始枚举如果某一个点被更新到,呢么这个点一定不会被后面的点更新,就直接可以标记掉,从n号点出发可以到达5号点,呢么从n-1号点出发就可以直接跳过5号点,还有5号点能到达的点。复杂度是O(n),这样的想法很常见*/#include......
  • 代码随想录 day37 单调递增的数字 监控二叉树
    单调递增的数字只想到暴力解法然后超时这里思路是如果从后往前发现不是递增序列那就把前一位--后一位数字变成9然后维护这个变成9的坐标遍历完后把后面的也全部变成9这个对现在的我来说太难了先贴段代码理解一下吧classSolution{intres=0;publicintminCam......
  • 二叉树的广度遍历/层序遍历
    privateInteger[]breadthSearch(TreeNoderoot){ List<Integer>list=newArrayList<Integer>();//存放节点值 ArrayDeque<TreeNode>queue=newArrayDeque<TreeNode>();//队列,用来存放节点 queue.add(root); while(!queue.isEmpty()){ TreeNo......
  • JS遍历对象的方法 Object.keys() Object.values()
    1.Object.keys():返回对象可枚举属性组成的数据2.Object.values():返回对象可枚举的属性的属性值,组成的数据letperson={name:'小李',age:'15',}console.log(Object.keys(person));//['name','age']//返回对象可枚举属性组成的数......