二叉树遍历解析

              1 /           \ 2             3 /       \        /    \ 
4         5      6     7 
当你拿到一棵二叉树,无论它的形状如何的千奇百怪
我们都可以将它按照如下的方式划分根/      \
左子树    右子树
一棵有很多个节点的二叉树可以划分为以上的形式
也可以这么理解,只要是按以上形式组合的都可以称为是二叉树
一个仅仅只有根节点的二叉树也可以划分成以上的形式,只不过他的左右子树都为空罢了
所以,我们发现,二叉树的定义其实是一个递归定义的过程
大的二叉树是由小的二叉树构建而成的
所以,当我们考虑要遍历一棵二叉树时
也是首选递归的遍历
遍历二叉树
它的基本思想是先按照上面的形式把整棵二叉树划分为3部分
哪么接下来的工作就很简单了
我们只需要将这3部分都遍历一遍就可以了(这里用到了分而治之的思想)
而对于这3部分来说
根节点的遍历无疑是最方便的,直接访问就ok了
而对于左右子树呢?
我们不难发现,左右子树其实分别成为了两棵完整的树
他们拥有各自独立的根节点,左子树和右子树
对他们的遍历,很显然应该与刚才的遍历方法一致便可
(如果上面的都理解了,那么这个题就是小菜一碟了,如果觉得无法理解,可以按照下面的方法自己多分解几棵树)
对于这个题目,中序遍历这可二叉树
先看根节点1/        \
左子树      右子树
我们应该先遍历左子树
也就是下面这棵树2/   \
4       5
对于这棵树在进行中序遍历
我们应先遍历她的左子树
他只有一个根节点4,左右子树都为空
哪么遍历这个只有一个根节点的二叉树
先访问她的左子树,为空
返回
访问该树的根节点4
在访问右子树也为空
此时,这棵树已经被完全的遍历了
我们需要返回上一层也就是2/   \
4       5
这棵树
此时,她的左子树已经被访问完毕
根据中序遍历的规则
需要访问此树的根节点2
此时的访问顺序是4-2
访问了根节点
在访问右子树只有一个根节点的5(具体过程看4的访问)
5访问完毕
也就意味着2/   \
4       5
这棵树已经访问完了
需要返回上一层
也就是1为根的树
此时这棵树的左子树已经访问完毕
此时访问的顺序是4-2-5应该没有问题
接下来访问根节点1
在访问右子树3/   \
4       7
是不是觉得似曾相识???
她的访问应该跟2/   \
4       5
一致
哪么最终遍历的顺序也出来了
4-2-5-1-6-3-7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop Kerberos 认证下 Sentry 安装 + Sentry 权限设置使用

目录 一、安装Sentry 1.MariaDB中创建sentry数据库 2.CDH中添加sentry 服务 3.hive配置 启动Sentry 4.Impala配置 启动Sentry 5.Hue配置 启动Sentry 6.Hdfs配置 启动Sentry 7.重启服务,使配置生效 二、Sentry权限测试 1.创建hive超…

数据结构与算法的联系

首先,数据结构是一门计算机语言学的基础学科,它不属于任何一门语言,其体现的是几乎所有标准语言的算法的思想。 上面的概念有一些模糊,我们现在来具体说一说,相信你门的数据结构使用的是一门具体的语言比如C/C语言来说明&#xff…

mongodb最详细的安装与配置

今天晚上才装好,我觉得有必要写这篇文章给你们分享一下 我是看点击打开链接这位博主的文章才装好的其中我想引用里面内容从头到尾来给你们 分享一下流程 第一步:下载mongodb https://www.mongodb.com/download-center#community 第二步:m…

Impala-shell 启动异常 - Python版本为3.x 启动脚本为2.x

启动 Impala-shell 报错如下 [rootxxx ~]# impala-shellFile "/opt/cloudera/parcels/CDH-5.13.0-1.cdh5.13.0.p0.29/bin/../lib/impala-shell/impala_shell.py", line 222print \tNo options available.^ SyntaxError: Missing parentheses in call to print发现语…

C++面试题(八)

客观题 (1)大端、小端问题&#xff0c;以共用体示例代码给出 假设计算机的CPU是Intel 32位的&#xff0c;以下代码输出结果是什么&#xff1f; [cpp] view plaincopy #include<stdio.h> union ut { short s; char ch[2]; }u; int main() { …

基于 Sentry Hive 权限控制命令详解

Sentry不支持Hive CLI列权限管理&#xff0c;建议禁用Hive CLI。 &#xff08;也不支持SparkSql列权限管理&#xff09; #权限分为 SELECT ,INSERT ,ALL #查看所有role show roles;#创建role create role role_name;#删除role drop role role_name; #将某个数据库读权限授予…

mongodb学习笔记之增删改查作指令

1: mongo入门命令 1.1: show dbs 查看当前的数据库 1.2 use databaseName 选库 1.2 show tables/collections 查看当前库下的collection 1.3 如何创建库? Mongodb的库是隐式创建,你可以use 一个不存在的库 然后在该库下创建collection,即可创建库 1.4 db.createCollectio…

Spark 报错 : Error: bad symbolic reference. A signature in SparkContext.class refers to term conf

报错如下&#xff1a; Error:scalac: Error: bad symbolic reference. A signature in SparkContext.class refers to term conf in package org.apache.hadoop which is not available. It may be completely missing from the current classpath, or the version on the cl…

怎么写出靠谱的简历

著 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。作者&#xff1a;王亞暉链接&#xff1a;http://www.zhihu.com/question/25002833/answer/35426774来源&#xff1a;知乎第一部分&#xff1a;基本信息。必须有的&#xff1a;名字、联系方式…

vue.js安装与配置

我们在前端学习中&#xff0c;学会了HTML、CSS、JS之后一般会选择学习一些框架&#xff0c;比如Jquery、AngularJs等。这个系列的博文是针对于学习Vue.js的同学展开的。 1.如何简单地使用Vue.js 如同以前我们学过的Jquery一样&#xff0c;我们在程序中使用Vue.js时也可以使用直…

简历模板

先讲讲怎样才是一份好的技术简历 首先&#xff0c;一份好的简历不光说明事实&#xff0c;更通过FAB模式来增强其说服力。 Feature&#xff1a;是什么Advantage&#xff1a;比别人好在哪些地方Benefit&#xff1a;如果雇佣你&#xff0c;招聘方会得到什么好处 其次&#xff0c;…

Sentry : Spark-sql 读取hive数据 权限问题

经测试Spark-sql 只支持Sentry表、库权限&#xff0c;不支持Sentry 对Hive列权限读的控制&#xff0c;设置列权限读&#xff0c;Spark-sql是无权限读取的 对hive表某一列有读权限设置 代码如下&#xff0c;jast_column用户有对hive表test的s2列读权限&#xff0c;这里使用spa…

运行第一个vue.js文件

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>第一个vue.js</title> <script src"https://cdn.bootcss.com/vue/2.2.2/vue.min.js"></script> </head> <body> <div id&qu…

请不要做个浮躁的人

1.把C当成一门新的语言学习&#xff08;和C没啥关系&#xff01;真的。&#xff09;&#xff1b; 2.看《Thinking In C&#xff0c;不要看《C变成死相》&#xff1b; 3.看《The C Programming Language》和《Inside The C Object Model》,不要因为他们很难而我们自己是初…

Hbase WALs(HLog) 文件存储,查看

WALs(HLog) 存储 HLog 存储位置是在&#xff0c;hbase配置目录下WALs目录&#xff0c;默认为 /hbase/WALs 与 /hbase/oldWALs /hbase/WALs : 存储未过期的日志/hbase/oldWALs : 存储已过期的日志 这里先查看WALs日志目录&#xff0c;目录格式为&#xff1a;hostname1 为 …

关于在头文件中定义变量

注意头文件中不可以放变量的定义&#xff01;&#xff01;&#xff01;一般情况下头文件中只放变量的声明&#xff0c;因为头文件要被其他文件包含&#xff08;即#include&#xff09;&#xff0c;如果把定义放到头文件的话&#xff0c;就不能避免多次定义变量&#xff0c;C不允…

Elasticsearch 6.x 下载安装

下载ES 下载ES安装包上传至服务器&#xff0c;地址为&#xff1a; https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.0.tar.gz 上传完成后解压 tar -zxvf elasticsearch-6.1.0.tar.gz 安装JDK 这里使用jdk8&#xff0c;官网下载安装即可&#xf…

抽象工厂模式-与-工厂方法模式区别

首先来看看这两者的定义区别&#xff1a; 工厂模式&#xff1a;定义一个用于创建对象的借口&#xff0c;让子类决定实例化哪一个类 抽象工厂模式&#xff1a;为创建一组相关或相互依赖的对象提供一个接口&#xff0c;而且无需指定他们的具体类 个人觉得这个区别在于产品&#x…

navicat设计表中添加自增长列

写web通讯录的时候在添加联系人时候需要主键故采用自增长列为主键&#xff0c;百度链接有详细教程 点击打开链接,注意的是在设计表中添加栏位后把类型改成bigint才会出现自增长选项&#xff0c;希望对你有用

ElasticSearch 索引、更新和删除数据

https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.1/client.html Relational DB -> Databases -> Tables -> Rows -> Columns Elasticsearch -> Indices -> Types -> Documents -> Fields 创建索引 , 5个分片&#xff0c;1个副本 …