title: 二叉树遍历
categories:
- 算法
- 刷题记录
tags: - 算法
- 二叉树
常规遍历
递归
递归的代码很简单
前序 中左右
这种写法其实不好,容易让人误解,return res 会被执行好多次
1 | var preorderTraversal = function(root, res = []) { |
下面这种容易理解
1 | var preorderTraversal = function(root) { |
中序 左中右
1 | var preorderTraversal = function(root, res = []) { |
后序 左右中
1 | var preorderTraversal = function(root, res = []) { |
迭代
迭代的很不容易理解
前序 中左右
普通写法
1 | var preorderTraversal = function(root) { |
统一写法 前序和中序 结果采集的地方不同,一个是出栈 一个是入栈
1 | var preorderTraversal = function(root) { |
中序 左中右
统一写法
1 | var inorderTraversal = (root) => { |
后序 左右中
可以把前序的普通写法改一下,变成中右左,然后倒着输出
普通写法倒着输出
1 | const postorderTraversal = function(root) { |
统一写法倒着输出
1 | const postorderTraversal = function(root) { |
利用标识符进行迭代,普通写法
1 | const postorderTraversal = function(root) { |
优秀统一迭代法 直接记这个就好
前序遍历统一迭代法
// 前序遍历:中左右
// 压栈顺序:右左中
1 | var preorderTraversal = function(root, res = []) { |
中序遍历统一迭代法
// 中序遍历:左中右
// 压栈顺序:右中左
1 | var inorderTraversal = function(root, res = []) { |
后序遍历统一迭代法
// 后续遍历:左右中
// 压栈顺序:中右左
1 | var postorderTraversal = function(root, res = []) { |
作者:carlsun-2
链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/solution/dai-ma-sui-xiang-lu-chi-tou-qian-zhong-hou-xu-de-d/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
层序遍历
leetcode一道基础的题
难度中等1081收藏分享切换为英文接收动态反馈
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7]
,
1 | 3 |
返回其层序遍历结果:
1 | [ |
递归解法
利用层级和数组解决
1 | var levelOrder = function(root) { |
迭代解法
方法看一下 很容易就能理解
1 | var levelOrder = function(root) { |
加深对二叉树递归的理解
230. 二叉搜索树中第K小的元素 labuladong 题解 思路
给定一个二叉搜索树的根节点 root
,和一个整数 k
,请你设计一个算法查找其中第 k
个最小元素(从 1 开始计数)。
示例 1:
1 | 输入:root = [3,1,4,null,2], k = 1 |
示例 2:
1 | 输入:root = [5,3,6,2,4,null,null,1], k = 3 |
对递归理解不深的解法,没错 我写的
1 | var kthSmallest = function(root, k) { |
实际上的正确解法
1 | var kthSmallest = function(root, k) { |
搜索二叉树插入数据
重点理解两种模式的不同
我的解法 简单直接
1 | var insertIntoBST = function(root, val) { |
另一种解法 不太容易理解
1 | var insertIntoBST = function(root, val) { |
搜索二叉树的删除操作
1 | var deleteNode = function(root, key) { |
95. 不同的二叉搜索树 II
给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。
示例 1:
1 | 输入:n = 3 |
1 | 输入:n = 1 |
1 | var generateTrees = function(n) { |