【算法基础6:二叉树查找】教程文章相关的互联网学习教程文章

每天1题算法题(1)-二叉树的中序遍历【代码】【图】

给定一个二叉树,返回它的中序 遍历。 输入: [1,null,2,3]12/3输出: [1,3,2]1.最简单也是最直接的,直接用递归算法实现class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> result = new ArrayList();dfs(root,result);return result;}public void dfs(TreeNode root, List list) {if(root == null) {return;}dfs(root.left, list);list.add(root.val);dfs(root.right, list);}} 缺点: 效率...

2020数据结构小学期(三)——由遍历序列恢复二叉树算法【代码】

3、由遍历序列恢复二叉树 输入:遍历序列 功能要求:输出二叉树形态或输出二叉树的三种遍历序列 源码: 1 class TreeNode():2 def __init__(self, val, left=None, right=None):3 self.val = val4 self.left = left5 self.right = right6 7 8 def post_print(root):9 if root: 10 post_print(root.left) 11 post_print(root.right) 12 print(root.val, end=" ") 13 14...

数据结构和算法躬行记(3)——二叉树【代码】【图】

树是一种非线性表数据结构,树的基本概念如下所列。(1)结点高度:结点到叶子结点的最长路径(即边数)。例题:112. 路径总和。(2)结点深度:根结点到这个结点所经历的边的个数。例题:104. 二叉树的最大深度。(3)结点层数:结点深度加 1。(4)树的高度:根结点的高度。例题:面试题 04.02. 最小高度树。后面几张这种类型的图都来源于《数据结构与算法之美》。图 2(5)二叉树:只包含左右两个子结点的树(编号1)。(6)满二...

LeetCode 107. 二叉树的层次遍历 II | Python【代码】

107. 二叉树的层次遍历 II题目 题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其自底向上的层次遍历为: [[15,7],[9,20],[3] ]解题思路思路:广度优先搜索(BFS) 先看题目,题目要求返回...

《剑指offer》面试题15:二叉树的镜像(Python)【代码】

题目描述操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8/ 6 10/ \ / 5 7 9 11镜像二叉树8/ 10 6/ \ / 11 9 7 5题目解析: 这个题目有两个解法,都运用了递归的思想,在二叉树当中使用递归一般都要对树的结构操作两次。 解法一:对源二叉树进行修改# -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # ...

C# 完全二叉树【代码】

using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text;namespace 快排 {class Tree{private int _data;private Tree _leftChild;private Tree _rightChild;public Tree(int value){this._data = value;this._leftChild = null;this._rightChild = null;}public int data{get { return this._data; }set { this._data = value; }}public Tree leftChild{get { return ...

Python改变一行代码实现二叉树前序、中序、后序的迭代遍历【代码】

Python改变一行代码实现二叉树前序、中序、后序的迭代遍历递归今天在做LeetCode的二叉树前序遍历题的时候,我看到题目是这样的:给定一个二叉树,返回它的前序遍历 递归方法很简单,你可以通过迭代算法完成吗?我当时就不乐意了,你这也太高看我了,什么叫递归方法很简单?没想到我递归方法我也不会吧经过我冥思苦想终于把以前学数据结构的时候记忆拿回来了其实真的很简单,如下:# 前序 def preorderTraversal(self, root):if roo...

数据结构--二叉树(Java)【代码】【图】

数据结构--二叉树(Java)博客说明文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!树的常用术语(结合示意图理解)节点 根节点 父节点 子节点 叶子节点 (没有子节点的节点) 节点的权(节点值) 路径(从root节点找到该节点的路线) 层 子树 树的高度(最大层数) 森林 :多颗子树构成森林树存储方式优势 能提高数据存储,读取的效率, 比如利用 二叉排序树(Binary Sort Tre...

LeetCode 102. 二叉树的层序遍历 Java【代码】【图】

这个层序遍历要求返回每层的节点,正常的BFS从队列中弹出一个节点后就判断其有没有左子树和右子树,所以直接用BFS实现的话无法分层输出。 需要记录每层的节点数目,增加一个for循环就可以了。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/ class Solution {public List<List<Integer>> levelOrder(TreeNode...

二叉树的遍历算法【代码】

二叉树的遍历算法 概述 二叉树作为一个基础的数据结构,遍历算法作为一个基础的算法,两者结合当然是经典的组合了。很多题目都会有 ta 的身影,有直接问二叉树的遍历的,有间接问的。比如要你找到树中满足条件的节点,就是间接考察树的遍历,因为你要找到树中满足条件的点,就需要进行遍历。你如果掌握了二叉树的遍历,那么也许其他复杂的树对于你来说也并不遥远了二叉数的遍历主要有前中后遍历和层次遍历。 前中后属于 DFS,层次遍...

重新整理数据结构与算法(c#)—— 线索化二叉树[二十]【代码】【图】

前言 为什么会有线索化二叉树呢? 是这样子的,二叉树呢,比如有n个节点,那么就有n+1个空指针域。 这个是怎么来的呢?比如我们假如一个节点都有左子树和右子树,那么就有2n个节点。 但是我们发现连接我们节点的一共有n-1个(要把n个节点串起来),那么就等于2n-(n-1)=n+1。 那么如何利用这些空间? 假如中序遍历如下: {8,3,10,1,6,14} 那么如果3的右节点为空,就指向它的后驱节点,也就是10。 如果3的左节点为空,那么就指向它的前驱...

使用javaScript实现一个二叉树,实现插入节点,删除节点,查询节点,最大最小值查询,中序,前序,后序遍历功能【代码】

const Compare = {LESS_THAN: -1,BIGGER_THAN: 1,EQUALS: 0 }; function defaultCompare(a,b){return a == b?Compare.EQUALS:(a<b)?Compare.LESS_THAN:Compare.BIGGER_THAN; } class Node{constructor(key){this.key = key;this.left = null;this.right = null;} } class BinarySearchTree{constructor(compareFn = defaultCompare){this.compareFn = compareFn;this.root = null;}insert(key){if(this.root == null){this.root = ...

LeetCode 297. 二叉树的序列化与反序列化 | Python【代码】【图】

297. 二叉树的序列化与反序列化题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree 题目序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。 请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需...

力扣----6. 二叉树的层序遍历(JavaScript, Java实现)【代码】

题目描述: 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例:二叉树:[3,9,20,null,null,15,7],3 / \ 9 20 / \ 15 7返回其层次遍历结果:[[3], [9,20], [15,7]] JavaScript实现: 乘热打铁,第5题的用bfs实现,稍微改进下就是下列代码。思路看5的BFS吧 时间复杂度:每个点进队出队各一次,故渐进时间复杂度为 O(n)O(n)。空间复杂度:队列中元素的个数不超过 nn...

python求二叉树深度

废话不多说 直接上代码# 用于生生一个类似于二叉树的数据 class Node:def __init__(self, value=None, left=None, right=None):self.value = valueself.left = leftself.right = rightdef tree_depth(tree):if tree is None:return 0left_depth = tree_depth(tree.left)right_depth = tree_depth(tree.right)return left_depth + 1 if left_depth > right_depth else right_depth + 1trr = Node(D, left=Node(B, Node(A), Node(C))...