一.线索二叉树简介 二叉树本身是一种非线性结构,然而当你对二叉树进行遍历时,你会发现遍历结果是一个线性序列.这个序列中的节点存在前驱后继关系.因此,如何将这种前驱后继信息赋予给原本的二叉树呢?这就是二叉树的线索化过程.所以可以通过丰富原有的二叉树构建一棵可以知道结点的前驱后继的新的二叉树,我们叫它线索二叉树. 二.构建线索二叉树 2.1 定义线索二叉树节点 public class ThreadNode<E> { public E data; public ThreadNode<E>…
前面两篇博客介绍了线性表的顺序存储与链式存储以及对应的操作,并且还聊了栈与队列的相关内容.本篇博客我们就继续聊数据结构的相关东西,并且所涉及的相关Demo依然使用面向对象语言Swift来表示.本篇博客我们就来介绍树结构的一种:二叉树.在之前的博客中我们简单的聊了一点树的东西,树结构的特点是除头节点以外的节点只有一个前驱,但是可以有一个或者多个后继.而二叉树的特点是除头结点外的其他节点只有一个前驱,节点的后继不能超过2个. 本篇博客,我们只对二叉树进行讨论.在本篇博客中,我们对二叉树进行创建,然后…
Nonrecursive Traversal of Binary Tree First I wanna talk about why we should <code>Stack</code> to implement this algorithm. I think it is due to the FILO feature, and that really matters and makes sense when you get around with tree stuff. Ca…
一.先序递归遍历(Preorder Recursive Traversal) 1.1 算法 首先需要明确的是这里的序是针对 root 节点而言的.故先序即先“访问”根节点,其次“访问”其左右节点. 1.2 图示 1.3 代码 Talk is cheap, show me the code!    -- Linus Benedict Torvalds public void preOrder(Node<E> root){ if(root != null) { System.out.print(r…
目录 前言 线索二叉树的概念 线索二叉树的实现 线索二叉树的寻点思路二 类双向链表参考图 参考代码 中序遍历线索化 前言 在<大话数据结构>P190 页中有一句话:其实线索二叉树,就等于是把一棵二叉树转变成了一个双向链表. 对于这句话实在想不懂,线索二叉树只是把二叉树以某种次序遍历把空域填上前驱或后继而已,若度为 2 的结点没有多余的指针域用于线索了,那双向链表就断了啊. 李柱明博客:https://www.cnblogs.com/lizhuming/p/15487406.html 线索二叉树…
遍历二叉树   traversing binary tree 线索二叉树 threaded binary tree 线索链表 线索化 1. 二叉树3个基本单元组成:根节点.左子树.右子树 以L.D.R分别表示遍历左子树.访问根节点.遍历右子树 可能的情况6种 排列A3 2 LDR LRD DLR DRL RLD RDL 若限定先左后右 LDR LRD  中根序遍历  后根序遍历 DLR  先根序遍历 先/中/后 序遍历…
二叉树是我们常见的数据结构之一,在学习二叉树之前我们需要知道什么是树,什么是二叉树,本篇主要讲述了二叉树,以及二叉树的遍历. 你能get到的知识点? 1.树的介绍 2.二叉树的介绍 3.二叉树遍历的四种方法 4.牛客题目:反转二叉树 目录 你能get到的知识点? 一.知识预备 1.树 2.树的相关术语介绍 1.二叉树 2.二叉树类型 二.二叉树实操(我没有说脏话) 1.定义二叉树的结点 2.遍历二叉树(四种方法) 三.小试牛刀 leetcode题目:反转二叉树 一.知识预备 1.树 树(Tree…
前面我们谈到了排序二叉树,还没有熟悉的同学可以看一下这个,二叉树基本操作.二叉树插入.二叉树删除1.删除2.删除3.但是排序二叉树也不是没有缺点,比如说,如果我们想在排序二叉树中删除一段数据的节点怎么办呢?按照现在的结构,我们只能一个一个数据查找验证,首先看看在不在排序二叉树中,如果在那么删除:如果没有这个数据,那么继续查找.那么有没有方法,可以保存当前节点的下一个节点是什么呢?这样就不再需要进行无谓的查找了.其实这样的方法是存在的,那就是在排序二叉树中添加向前向后双向节点.    现在数据结构…
一.二叉树的基本概念 从逻辑结构角度来看,前面说的链表.栈.队列都是线性结构:而今天要了解的“二叉树”属于树形结构. 1.1 多叉树的基本概念,以上图中“多叉树”为例说明 节点:多叉树中的每一个点都叫节点:其中最上面的那个节点叫“根节点”: 父节点:节点1是节点2/3/4/5/6的父节点,然后节点2/3/4/5/6是节点1的子节点:节点2/3/4/5/6又是互为兄弟节点,因为它们有父节点为同一个节点: 空树:一个没有任何节点的树叫空树:一棵树可以只有一个节点,也就是只有根节点: 子树:子节点及子…
1.第226题:翻转二叉树 递归+迭代两种实现方式: /** 反转二叉树 * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {TreeNode} root * @return {TreeNode} * 第一种方式迭代 * 执行用时 :72 ms, 在所有 JavaScript 提…