《剑指offer》总结三 之二叉树(2)
23、二叉搜索树的后序遍历序列
题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
- 后序遍历:左子树->右子树->根节点
思路:
对于后序遍历,其最后一个元素是根节点。因此对于序列S,最后一个元素是x(也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段子树都是合法的后序序列。
二叉搜索树:即二叉查找树、二叉排序树(可以是空树),是具有以下性质的二叉树:
若左子树不空,则左子树上所有节点的值均小于它的根节点的值;
若右子树不空,则右子树上所有节点的值均大于它的根节点的值;
它的左右子树也分别为二叉排序树。
\(\color{red}{代码实现}\):二叉搜索树的后序遍历
26、二叉搜索树与双向链表(31ms,5756k)
题目描述:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路:
在二叉搜索树中,左子节点的值总是小于父节点的值,右子节点的值总是大于父节点的值。因此,在做转换成排序双向链表时,原先指向左子节点的指针调整为链表中指向前一个节点的指针,原先指向右子节点的指针调整为链表中指向后一个节点的指针。(排序双向链表转化成二叉搜索树时,反向进行即可,即链表中指向前一个节点的指针指向二叉搜索树中的左子节点,链表中后一个节点的指针指向二叉二叉搜索树中的右子节点。)
由于要求转换后的链表是排序的,因此,我们可以通过中序遍历(正好是二叉搜索树中从小到大的顺序)树中的每个节点,每次遍历到根节点时,就把树分为三部分,第一部分为根节点,第二部分为该根节点的左子树,第三部分为该根节点的右子树。然后就可以将f该根节点和其左子树的最大值节点连接起来,并且和该根节点右子树的最小节点连接起来。
(按照中序遍历的顺序,当我们把遍历转换到根节点时,其左子树已经转换成一个排序的链表了,并且处在链表的最后一个节点是左子树最大值节点。连接上根节点后,接着就去遍历转换右子树,并把根节点和右子树中的最小值节点连接起来。)
二叉搜索树:即二叉查找树、二叉排序树(可以是空树),是具有以下性质的二叉树:
若左子树不空,则左子树上所有节点的值均小于它的根节点的值;
若右子树不空,则右子树上所有节点的值均大于它的根节点的值;
它的左右子树也分别为二叉排序树。
双向链表:双向链表和单链表一样,也是由节点组成,它的每个数据节点中都有两个指针,分别指向直接后继和直接前继。从双向链表的任意一个节点开始,都可以很方便地访问它的前驱节点和后继节点。(排序双向链表是指双向链表中的值已经从小到大排序)
- \(\color{red}{代码实现}\):二叉搜索树与双向链表
参考:
1、《剑指offer》书籍
2、牛客网在线编程:https://www.nowcoder.com/ta/coding-interviews
《剑指offer》总结三 之二叉树(2)的更多相关文章
- 剑指offer第三章
剑指offer第三章 1.数值的整数次方 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. class Solution { public ...
- [剑指 Offer 28. 对称的二叉树]
剑指 Offer 28. 对称的二叉树 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / ...
- 剑指Offer - 九度1521 - 二叉树的镜像
剑指Offer - 九度1521 - 二叉树的镜像2013-11-30 23:32 题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入 ...
- 剑指Offer - 九度1368 - 二叉树中和为某一值的路径
剑指Offer - 九度1368 - 二叉树中和为某一值的路径2013-11-23 03:46 题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结 ...
- 剑指Offer - 九度1350 - 二叉树的深度
剑指Offer - 九度1350 - 二叉树的深度2013-11-23 00:54 题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的 ...
- 剑指Offer:对称的二叉树【28】
剑指Offer:对称的二叉树[28] 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 题目分析 Java题解 /* publi ...
- 剑指Offer(三十二):把数组排成最小的数
剑指Offer(三十二):把数组排成最小的数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/b ...
- 剑指Offer(三十七):数字在排序数组中出现的次数
剑指Offer(三十七):数字在排序数组中出现的次数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.n ...
- 剑指Offer(三十六):两个链表的第一个公共结点
剑指Offer(三十六):两个链表的第一个公共结点 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...
- 剑指Offer(三十五):数组中的逆序对
剑指Offer(三十五):数组中的逆序对 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/bai ...
随机推荐
- Fiddler抓包【1】_介绍及界面概述
一. 主要抓包工具介绍与对比 1.Wireshark :通用抓包工具,抓取信息量庞大,需要过滤才能得到有用信息,只抓HTTP请求有点大财小用. 2.Firebug.HttpWatch等Web调试工 ...
- linux配制DNS服务器基本能功能
1.环境 Centos 6.5 bind 关闭防火墙和SELINUX 2.安装bind服务软件 yum -y install bind 3.配制主配制文件/etc/name.conf options ...
- codeforces-4
这题使用到了类似于双数据 Maximal Continuous #include<iostream> #include<algorithm> #include<stdio ...
- Windows下的Python安装与环境变量的配置
Windows下的Python安装与环境变量的配置 第一步:python下载: Python安装包下载地址:http://www.python.org/ 第二步:python安装: 双击下载包,进入P ...
- 为fastdfs文件服务器新增一个storage
一.前言: 前期,已经搭建好了一套fastdfs文件服务器,一个tracker和一个storage,且部署在同一台服务器上,已经正式投入运行快半年了,1T的空间现在只剩下100G容量了,现在需要扩容, ...
- Linux CAN Shell 测试脚本程序
2012-01-13 22:57:14 为我的开发板2440做二次开发,添加了can驱动,做了驱动测试程序,没理由不添加一个测试脚本程序啊!修改了测试程序,使应用程序更加灵活,添加了一下传递参数.接着 ...
- centos6.5 MySQL数据库的安装
<div id="home"><div id="header"> <div id="blogTitle"> ...
- CentOS7 安装极点五笔输入法
下载并解压vissible-ibus.tar.gz 或者这个vissible-ibus.tar.gz cp vissible.db /usr/share/ibus-table/tables/ cp v ...
- 用keytool制作证书并在tomcat配置https服务(二 )
用keytool制作证书并在tomcat配置https服务(一) 双向认证: 我们上边生成了服务端证书,并发送给客户端进行了验证. 双向认证是双向的,因此还差客户端证书. 1.为方便导入浏览器,生成p ...
- 详解设计模式在Spring中的应用
设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆. 今天,在IT学习者网站就设计模式的内在价值做一番探讨,并以spring为例进行讲解,只有领略了其设 ...