二叉树的遍历

CE基础图文教程:利用CE遍历人物属性 教你如何使用CE人物属性.图文教程,简单明了~ 立即下载

二叉树的性质

1,二叉树的第i层最多包含2*i-1个节点。

2,二叉树如果深度为k(有k层),那么最多含有(2^k )-1个节点。

3,若二叉树按照从上到下从左到右的方式编号,某节点的编号为k,那么他的左右子树分别编号为2k,2k+1.

4,二叉树分类:满二叉树,完全二叉树,平衡二叉树。

满二叉树:除了叶子结点以外所有的结点都必须满足度最大,即,一个深度为k的满二叉树,其包含的叶子结点数为(2^k )-1。满二叉树即每个非叶子节点的左右子树均在。

完全二叉树:除了深度最大的一层以外,其他每层结点都必须均在,层数为k的完全二叉树的每个节点的编号,与层数为k的满二叉树的结点编号一一对应。

满二叉树必为完全二叉树,完全二叉树不一定为满二叉树。

二叉树的创建:

  public static Tree createTree(int [] array){
        ArrayList<Tree> list = new ArrayList<>();

        for (int i = 0; i < array.length; i++) {
            list.add(new Tree(array[i]));
        }
        Tree root = list.get(0);
        for (int i = 0; i < list.size()/2; i++) {
            list.get(i).setLeft(list.get(2*i + 1));

            if(i*2 + 2 < list.size()){
                list.get(i).setRight(list.get(2*i + 2));
            }
        }
        return root;
    }

二叉树的遍历:  

深度优先,广度优先

前序中序和后序。

深度优先遍历使用栈,广度优先遍历使用队列。

 public static void  DepthFirstSearch(Tree root){
        Stack<Tree>  stack = new Stack<>();

        stack.push(root);
        while(!stack.empty()){
            Tree temp = stack.pop();
            System.out.println(temp.getVal());
            if(temp.getRight() != null){
                stack.push(temp.getRight());
            }

            if(temp.getLeft() != null){
                stack.push(temp.getLeft());
            }
        }
//原树  6 5 4 3 2 1 0

//6 5 3 2 4 1 0 

   深度优先即先左后右,则在遍历的时候,现将根节点打印之后,将根节点的右子树压入栈中,再将左子树压入栈中。利用栈的性质进行遍历。

广度优先使用队列,先进先出。

 public static void breadthFirstSearch(Tree root){
            Queue<Tree> queue = new LinkedList<>();

            queue.offer(root);
            while(queue.size() != 0){
                Tree temp = queue.poll();  //取出第一个元素并删除
                System.out.print(temp.getVal() + " ");

                if(temp.getLeft() != null){
                    queue.offer(temp.getLeft());
                }

                if(temp.getRight() != null){
                    queue.offer(temp.getRight());
                }
            }
    }

   先序遍历:根 ->左->右     和深度遍历一致。

   中序遍历:左 ->根->右

   后序遍历 :左->右->跟     

//二叉树中序遍历  左 根 右
public static void  inorderTraversal(Tree root){
        if(root == null){
            return;
        }

        Stack<Tree> stack = new Stack<Tree>();
        Tree p = root;

        while(p != null || !stack.empty()){

            while(p != null){
                stack.push(p);
                p = p.getLeft();
            }//将该节点压入栈并且其所有左结点都压入

            p = stack.pop();
            System.out.print(p.getVal() + " ");
            p = p.getRight();
        }
    }

                    

// 二叉树后序遍历
  public static void  postOrderTraversal(Tree root){
        if(root == null){
            return;
        }
        //利用两个栈  对于第一个栈入得顺序是跟左右  入第二个栈的顺序是  跟右左  出栈顺序 左右根
        Stack<Tree> stack1 = new Stack<>();
        Stack<Tree> stack2 = new Stack<>();
        stack1.push(root);

        while(!stack1.empty()){
            Tree node = stack1.pop();
            stack2.push(node);

            if(node.getLeft() != null){
                stack1.push(node.getLeft());
            }

            if(node.getRight() != null){
                stack1.push(node.getRight());
            }
        }


        while(!stack2.empty()){
            System.out.print(stack2.pop().getVal() + " ");
        }

    }

                                                                                   

二叉树 程序设计 课题研究的目的和意义 程序设计 二叉排序树 整个程序和流程图等 课题研究的目的和意义 可行性论证 课题总体设计方案 模块划分 数据结构 若干关键技术及设计结果 、结果分析 心得体会 参考文献 立即下载

相关推荐

暗黑地牢modfiles.txt文件生成工具

暗黑地牢modfiles.txt文件生成工具引言方法工具源码基本步骤 引言 玩过暗黑地牢mod,并手动修改了mod中文件的话,如果不同步修改modfiles.txt文件,就会引起各种问题,典型的比如马车刷不出mod英雄,商店和boss都不再出现mod饰品,怪物贴图丢失出现黑块等,要解决这个问题,就要修正mod文件夹下的modfiles.txt文件 方法 针对修改量大小,一般有几种方法: 如果修改较少,而且你还记得修改了哪几个文件,找到这几个文件,右键属性,查看大小,要用的是括号里面的字节数,然后打开mod

lttclaw_的专栏 5002

外挂学习之路(11)--- 背包数据的遍历

查找数据主要包括:背包数据遍历、NPC数据遍历、怪物数据遍历、地面物品数据遍历、技能列表遍历、周围玩家数据遍历、地图数据的查找、人物信息的查找等等。 本次只讨论需要遍历的数据 为什么要遍历数据? 一般来讲是给我们找到的call当参数使用的,比如我们找到打怪call,但是这个call需要一个参数是怪物的指针,我们上哪去弄这个指针?我们只能去遍历怪物数据,这些数据包括怪物指针,怪物的坐标,怪物的

liujiayu2的专栏 1万+

哈密顿-雅可比不等式:连接最优控制与优化算法的自然物理原理

在控制理论与优化算法之间,存在一个深刻而实用的桥梁。最优控制理论旨在通过设计控制输入,使动态系统在时间维度上达到性能最优,其核心数学工具如庞特里亚金极大值原理和哈密顿-雅可比-贝尔曼方程,为解决连续时间系统的优化问题提供了优雅框架。然而,这些方法在高维非凸问题中面临求解难题。哈密顿-雅可比不等式作为一种松弛方法,通过构造李雅普诺夫函数并验证一个不等式条件,转而寻求性能有保障且易于实现的次优解,其本质是保证系统能量衰减和性能上界。这一原理与耗散性理论紧密相连,体现了自然物理系统(如阻尼振动)中能量耗散的普遍规

weixin_30582943的博客 313

[算法] 二叉树的 先序遍历、中序遍历、后序遍历

本文根据清华大学邓俊辉老师课程《数据结构》总结,课程地址 。 遍历介绍 按照事先约定的某种规则或次序,对节点各访问一次而且仅一次。与向量和列表等线性结构一样,二叉树的这类访问也统称为遍历(traversal)。 二叉树本身并不具有天然的全局次序, 故为实现遍历,需通过在各节点与其孩子之间约定某种局部次序, 间接地定义某种全局次序。 按惯例左兄弟优先于右兄弟, 若记做节点 V ,...

scxyz的博客 3万+

Win11笔记本BIOS设置避坑大全:Secure Boot、RST、UEFI引导,一次讲清

本文详细解析了Win11笔记本BIOS设置中的关键问题,包括Secure Boot、Intel RST和UEFI引导的配置方法,帮助用户避开双系统安装中的常见陷阱。特别针对不同品牌笔记本的BIOS界面差异,提供了实用的操作指南和优化建议,确保系统兼容性和启动效率。

weixin_29251131的博客 688

c# 开发串口调试助手 Visual Studio 2019

串口调试助手是用于在开发、测试和调试串口通信应用程序时进行串口数据的监视和交互的工具。

2301_76792852的博客 8060

二叉树的查找

#include&lt;iostream&gt; #include&lt;stdlib.h&gt; using namespace std; #define M 100 typedef struct node /*二叉链表结点结构*/ { int data; /*数据域*/ struct node *lchild, *rchild;/*左、右孩子域*/ } bitree; ...

zylg 384

时空双重机器学习在环境政策评估中的创新应用

因果推断是数据分析中的核心问题,特别是在环境政策评估领域。传统方法如差异分析法(DID)在处理时空维度上的复杂相关性时存在局限。机器学习技术,特别是双重机器学习(DML),通过分阶段建模有效解决了混杂变量问题。结合贝叶斯加性回归树(BART)的灵活建模能力,可以更准确地捕捉空间和时间模式。这种时空双重机器学习(ST-DML)方法在柬埔寨森林砍伐案例中表现出色,通过Wendland基函数有效处理了空间自相关问题。该技术框架不仅适用于环境政策评估,还可扩展至空气质量、水资源管理等其他领域,为政策制定提供更精准的

weixin_28685045的博客 344

【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 尝试进行瞬移操作 | 尝试查找飞天漏洞 )

一、尝试进行瞬移操作、 二、尝试查找飞天漏洞、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2007

库存管理系统项目部署方案(基于jdk17)

不需要安装到服务器,运维本地安装就行,主要是用来编译前端代码的。构建完成后将dist文件夹复制到服务器内。

程序员诚哥 6370

【数据集】中国陆地生态系统通量观测网 ChinaFLUX

【数据集】中国陆地生态系统通量观测网 ChinaFLUX

WW、forever的博客 188

图解二叉树及二叉树遍历

二叉树及二叉树遍历 完全二叉树 二叉树的遍历 遍历的性质 1、完全二叉树 对于一棵具有n个节点的二叉树(按层序编号),如果编号为i的节点与同样深度的满二叉树中编号为i的节点在二叉树的位置完全相同,则为完全二叉树。 换句话来说,如果每个节点按照满二叉树的结构逐层顺序进行编号,如果编号出现编号空挡,就说明不是完全二叉树,否则就是。如下图所示:左边二叉树按照完全二叉树进行编号,出现了10号的空挡,右边

xiaotan2011929的博客 2万+

Go语言全面解析:从入门到精通

Go语言是由Google开发的一种静态类型、编译型编程语言,具有简洁、高效、安全的特点。它特别适合高并发服务、云原生应用和网络编程等场景。Go采用Goroutine和Channel实现轻量级并发,性能接近C/C++。与其他语言相比,Go语法更简洁但类型更严格,编译速度快且跨平台支持好。虽然Go支持多种设计模式和编程范式,但其面向对象实现方式与传统语言不同。标准库丰富且拥有Gin、GORM等企业级框架。核心语法包括包管理、变量声明、函数定义、流程控制等,适合构建高性能后端服务和系统工具。

博哥哥的博客 4925

详解二叉树的遍历

概述 二叉树的遍历是一个很常见的问题。二叉树的遍历方式主要有:先序遍历、中序遍历、后序遍历、层次遍历。先序、中序、后序其实指的是父节点被访问的次序。若在遍历过程中,父节点先于它的子节点被访问,就是先序遍历;父节点被访问的次序位于左右孩子节点之间,就是中序遍历;访问完左右孩子节点之后再访问父节点,就是后序遍历。不论是先序遍历、中序遍历还是后序遍历,左右孩子节点的相对访问次序是不变的,总是先访问左孩子...

supermouse的博客 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

二叉树的前序遍历(先序遍历)、中序遍历、后续遍历及两种遍历序列推导二叉树

二叉树的遍历: 前序遍历(先序遍历)、中序遍历、后续遍历 二叉树的遍历是指不重复地访问二叉树中所有结点,主要指非空二叉树,对于空二叉树则结束返回,二叉树的遍历主要包括前序遍历、中序遍历、后序遍历 给定了二叉树的任何一种遍历序列,都无法唯一确定相应的二叉树。但是如果知道了二叉树的中序遍历序列和任意的另一种遍历序列,就可以唯一地确定二叉树。 一、前序遍历(先序遍历):(根->左->右) 前序遍历:首先访问根结点,然后遍历左子树,最后遍历右子树; 顺序:访问根节点->前序遍历左子树->前

DayDayUp 9436

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

遍历二叉树

二叉树遍历

weixin_52555350的博客 5910

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

二叉树的遍历和线索二叉树

若二叉树为空,则空操作;否则(1)访问根结点(2)先序访问左子树(3)先序访问右子树//采用二叉链表存储结构,Visit是对数据元素操作的应用函数//先序遍历二叉树T的递归算法,对每个数据元素调用函数Visit//最简单的Visit函数是:// status PrintElement(TElemType e){//输出元素e的值//使用时,加上格式串//调用实例:PreOderTranverse(T,PrintElement);if (T){

2401_87880211的博客 2385

二叉树遍历 和 线索二叉树

其实你获得这串顺序编号就是通过访问操作而来的假设访问操作是 visit(p) #p是指向被访问的节点“输出参数p所指向地址的节点的编号void visit(二叉树结构的指针类型 p)printf("%c",p->data) #我们在遍历中默认:二叉树结构中data存储的是二叉树的编号。通过上述代码你在用遍历过程中根据visit添加位置的不同就能确定二次树的访问顺序到这里你应该已经能明白大部分的问题了,我们开始通过代码对知识的巩固。

m0_63523451的博客 1889

二叉树及先序遍历二叉树,中序遍历二叉树,后序遍历二叉树

目录 定义结点数据类型 建立一颗带头结点的二叉树 遍历 访问函数 主代码 定义结点数据类型 typedef struct bitnode { char data; struct bitnode *Lchild,*Rchild; } BiTNode,*BiTree; 建立一颗带头结点的二叉树 BiTree CreatTree() { BiTree p...

小小前端攻城狮的博客 3533

js实现二叉树遍历

js实现二叉树遍历二叉树遍历1、递归遍历(前、中、后)2、层序遍历3、重建二叉树参考文献 二叉树遍历 常用的二叉树的遍历方式:前序遍历、中序遍历、后序遍历、层序遍历 (1)前序遍历:左、右、根; (2)中序遍历:左、根、右; (3)后续遍历:左、右、根; (4)层序遍历:从上到下,同层节点从左到右。 1、递归遍历(前、中、后) //节点结构 /* function TreeNode(x) { ...

YongxiaWu的博客 6024

二叉树之遍历

二叉树常见遍历方法

my_air的博客 1157

二叉树的遍历以及遍历序列构建二叉树

文章目录二叉树的遍历NLR 前序遍历LNR 中序遍历LRN 后序遍历通过遍历序列构造二叉树中序 + 后序中序 + 前序 结点结构: typedef struct Node{ ElementType value; Node* left; Node* right; Node(ElementType value_, left_ = NULL, right_ = NULL) :value(va...

还是应该要努力的(12点前睡觉!!!!! 1014

二叉树遍历

二叉树:二叉树是每个节点最多有两个子树的树结构。   本文介绍二叉树的遍历相关知识。 我们学过的基本遍历方法,无非那么几个:前序,中序,后序,还有按层遍历等等。 设L、D、R分别表示遍历左子树、访问根结点和遍历右子树, 则对一棵二叉树的遍历有三种情况:DLR(称为先根次序遍历),LDR(称为中根次序遍历),LRD (称为后根次序遍历)。 首先我们定义一颗二叉树 typedef cha...

少说,多做。 8237
上一篇: 关于哈希和加密
下一篇: Mysql出现中文乱码
Embra_ce
博客等级 码龄9年 2粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值