后序遍历

20182301 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结

白昼怎懂夜的黑 提交于 2019-12-05 15:33:13
20182301 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结 教材学习内容总结 图的结构构成 顶点(vertex):图中的数据元素,如图一 边(edge):图中连接这些顶点的线,如图一 G=(V,E) 或者 G=(V(G),E(G)) 其中 V(G)表示图结构所有顶点的集合,顶点可以用不同的数字或者字母来表示。E(G)是图结构中所有边的集合,每条边由所连接的两个顶点来表示。 图结构中顶点集合V(G)不能为空,必须包含一个顶点,而图结构边集合可以为空,表示没有边。 图的基本概念 无向图 如果一个图结构中,所有的边都没有方向性,那么这种图便称为无向图。典型的无向图,如图二所示。由于无向图中的边没有方向性,这样我们在表示边的时候对两个顶点的顺序没有要求。例如顶点VI和顶点V5之间的边,可以表示为(V2, V6),也可以表示为(V6,V2)。 有向图 一个图结构中,边是有方向性的,那么这种图就称为有向图,如图三所示。由于图的边有方向性,我们在表示边的时候对两个顶点的顺序就有要求。我们采用尖括号表示有向边,例如<V2,V6>表示从顶点V2到顶点V6,而<V6,V2>表示顶点V6到顶点V2。 顶点的度 连接顶点的边的数量称为该顶点的度。顶点的度在有向图和无向图中具有不同的表示。对于无向图,一个顶点V的度比较简单,其是连接该顶点的边的数量,记为D(V)。

C++二叉树值创建于遍历二

一个人想着一个人 提交于 2019-12-05 14:33:39
#include <iostream> #include <cstdlib> #include<queue> #include <stack> using namespace std; //二叉树链表的存储结构 typedef struct BiTNode { int data;//节点数据 struct BiTNode *lchild, *rchild;//左右孩子指针 }BiTNode, *BiTree; //二叉树的建立 void CreatBiTree(BiTree &T) { int ch; cin >> ch; if (ch == 0) T = NULL; else { T = new BiTNode;//生成根节点 if (!T) exit(1); T->data = ch; CreatBiTree(T->lchild); //构造左子树 CreatBiTree(T->rchild); //构造右子树 } } //创建二叉树 BiTNode* create(int b[], int n) { BiTNode* ptree =new BiTNode [n]; int i; for (i = 0; i < n; i++) { ptree[i].data = b[i];//给每个节点赋值 ptree[i].lchild = NULL;// ptree[i].rchild =

leetcode105 从前序与中序遍历序列构造二叉树

旧街凉风 提交于 2019-12-05 09:52:58
如何遍历一棵树 有两种通用的遍历树的策略: 宽度优先搜索(BFS) 我们按照高度顺序一层一层的访问整棵树,高层次的节点将会比低层次的节点先被访问到。 深度优先搜索(DFS) 在这个策略中,我们采用深度作为优先级,以便从跟开始一直到达某个确定的叶子,然后再返回根到达另一个分支。 深度优先搜索策略又可以根据根节点、左孩子和右孩子的相对顺序被细分为前序遍历,中序遍历和后序遍历。 public class Solution{ private int preIndex=0; private int[] preOrder; private int[] inOrder; Map<Integer,Integer> map=new HashMap<Integer,Integer>(); publice TreeNode bulidTree(in[] preOrder,int[] inOrder){ this.preOrder=preOrder; this.inOrder=inOrder; int idx=0; for(Integer s:inOrder){ map.put(s,idx++); } } private TreeNode helper(Int left,int right){ if(left==right){ return null; } int index=0; int root

PTA 树的遍历

喜欢而已 提交于 2019-12-05 08:52:45
给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。 输出格式: 在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。 输入样例: 7 2 3 1 5 7 6 4 1 2 3 4 5 6 7 输出样例: 4 1 6 3 5 7 2 用数组模拟二叉树,设根结点为n,左孩子编号为2n,右孩子编号为2n+1,以这种方式存储二叉树 按顺序输出则为层序遍历。下面就定义一个数组,然后不断在子递归中查找根结点,将根结点存入相应的数组位置中。 1 //下标从0开始 2 //post[]为已知的后序遍历元素,in[]为已知的中序遍历元素 3 //len-1为传进的post[]的根结点下标,len为在子递归函数(即左右子树)中的元素个数 4 //p为根在num[]中的存储位置,即左右孩子结点成为子递归的根 5 //p的起始位置是1 6 void Levelorder(int post[],int in[],int len,int p) 7 { 8 if(len < 1) //当子树没有元素时,返回 9 { 10 num[p] = -1; 11 return; 12 } 13 14 int i

(机考)二叉树后序遍历

ぐ巨炮叔叔 提交于 2019-12-05 08:30:29
二叉树后序遍历 描述: 输入一个整数数组,判断该数组是不是某二叉排序树的后序遍历结果。如果是返回true,否则返回false。 例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 因此返回true。 如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。 输入说明: 包含多组数据,第一行是数据组数T,接下来有2T行, 每组数据有2行: 第一行为整数n,表示序列元素的个数,n小于100。 第二行为n个元素。 输出说明: 判断这个序列是不是某个二叉树的后序遍历序列,是输出“YES”,不是输出“NO”。 输入样例: 2 7 4 8 6 12 16 14 10 4 7 4 6 5 输出样例: YES NO #include<stdio.h> bool verifySequenceOfBST(int* sequence, int length) { int i; int root = sequence[length - 1]; for (i = 0; i < length - 1; i++) { if (sequence[i] > root) break; } int j = i; for (j; j < length - 1; j++) { if (sequence[j] < root) return false; } bool

二叉树的遍历

妖精的绣舞 提交于 2019-12-05 07:17:18
二叉树的遍历 二叉树的前序,中序,后序,层序遍历 package 剑指offer;import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;/** * @author WangXiaoeZhe * @Date: Created in 2019/11/22 18:11 * @description: */public class Main17 { public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } ArrayList<Integer> resultList = new ArrayList<>(); /** * 前序遍历:ABDEC * 1.首先遍历左子树,遍历到叶子结点为止 * @return * */ public boolean preorderTraverse(TreeNode node) { //首先从根节点开始遍历 resultList.add(node.val); if (node.left != null) { preorderTraverse(node.left); }

树的前世今生之数据结构遍历二叉搜索树平衡二叉树哈夫曼树哈夫曼编码堆的路径集合的并查按秩归并与路径压缩

百般思念 提交于 2019-12-05 02:11:11
正在更新~~~~ 在介绍树的概念之前,先来看一下树的四种遍历方式以此更直观了解树 void InorderTraversal( BinTree BT ) { if( BT ) { InorderTraversal( BT->Left ); /* 此处假设对BT结点的访问就是打印数据 */ printf("%d ", BT->Data); /* 假设数据为整型 */ InorderTraversal( BT->Right ); } }//中序遍历 void PreorderTraversal( BinTree BT ) { if( BT ) { printf("%d ", BT->Data ); PreorderTraversal( BT->Left ); PreorderTraversal( BT->Right ); } }//先序遍历 void PostorderTraversal( BinTree BT ) { if( BT ) { PostorderTraversal( BT->Left ); PostorderTraversal( BT->Right ); printf("%d ", BT->Data); } }//后序遍历 void LevelorderTraversal ( BinTree BT ) { Queue Q; BinTree T; if ( !BT )

数据结构与算法之美学习笔记:第二十三讲

大憨熊 提交于 2019-12-05 00:21:43
一、课前思考 前面我们讲的都是线性表结构,栈、队列等等。今天我们讲一种非线性表结构,树。树这种数据结构牛逼线性表的数据结构要复杂得多,内容也比较多,所以我会分四节来讲解。 我反复强调过,带着问题学习,是最有效的学习方式之一,所以在正式的内容开始之前,我还是给你出几道思考题: 二叉树有哪几种存储方式?什么样的二叉树适合用数组来存储? 带着这些问题,我们就来学习今天的内容,树! 二、树 1、一些节本概念 图中画了几棵“树”。你来看看,这些“树”都有什么特征? 你有没有发现,“树”这种数据结构真的很像我们现实生活中的“树”,这里面每个元素我们叫作“节点”;用来连线相邻节点之间的关系,我们叫作“父子关系”。 比如下面这幅图: A节点就是B节点的 父节点 ,B节点是A节点的 子节点 。 B、C、D这三个节点的父节点是同一个节点,所以它们之间互称为 兄弟节点 。 我们把没有父节点的节点叫作 根节点 ,也就是图中的节点E。 我们把没有子节点的节点叫作叶子节点或者 叶节点 ,比如图中的G、H、I、J、K、L都是叶子节点。 2、高度深度和层 除此之外,关于“树”,还有三个比较相似的概念:高度(Height)、深度(Depth)、层(Level)。它们的定义是这样的: 这三个概念的定义比较容易混淆,描述起来也比较空洞。我举个例子说明一下,你一看应该就能明白。 记这住个概念,我还有一个小窍们,就是类比

20182322 2019-2020-1 《数据结构与面向对象程序设计》第9周学习总结

点点圈 提交于 2019-12-05 00:08:29
教材第16章学习内容总结 本章的内容主要讲树,顾名思义树与队列、栈、列表最大的区别就在于,树是一种非线性结构,其元素是一种层次结构存放。 树: 用于描述树相关的术语有非常多,除了之前常用的结点(node)还有边(edge)、孩子、兄弟等等,其中我认为比较重要的有: 内部节点:非根节点,且至少有一个子结点 同胞节点:属于同一节点的子结点 叶节点:不包含任何子节点的结点 树的分类:可以有非常多的分类方式,但是最重要的标准是任一结点可以具有的最大孩子数目,成为度(order),n元树的定义也是由此定义的 树的数组实现:因为数组实现树比较麻烦,所以在树的数组实现中书上同样模拟了链接策略,如图所示。 树的遍历, 前序遍历:从根节点开始访问每一个节点及其孩子。如图: 中序遍历:从根节点开始(注意并不是先访问根节点),中序遍历根节点的左子树,然后是访问根节点,最后中序遍历根节点的右子树。如图: 后序遍历:从左到右先叶子后节点的方式遍历访问左右子树,最后访问根节点。如图: 层序遍历:从树的第一层,也就是根节点开始访问,从上到下逐层遍历,在同一层中,按从左到右的顺序结点逐个访问。如图: 二叉树 (二叉树极其重要,以至于用三级标题来写它,而不是一般的一个点。)二叉树又名二元树,它的每一个结点最多具有两个孩子结点。 二叉树 (二叉树极其重要,以至于用三级标题来写它,而不是一般的一个点。)二叉树又名二元树

【algo&ds】【吐血整理】4.树和二叉树、完全二叉树、满二叉树、二叉查找树、平衡二叉树、堆、哈夫曼树、B树、字典树、红黑树、跳表、散列表

前提是你 提交于 2019-12-04 20:51:38
本博客内容耗时4天整理,如果需要转载,请注明出处,谢谢。 1.树 1.1树的定义 在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 每个节点都只有有限个子节点或无子节点; 没有父节点的节点称为根节点; 每一个非根节点有且只有一个父节点; 除了根节点外,每个子节点可以分为多个不相交的子树; 树里面没有环路(cycle) 1.2常见术语 节点的度 :一个节点含有的 子树的个数 称为该节点的度; 树的度 :一棵树中,最大的节点度称为树的度; 叶节点 或 终端节点 :度为零的节点; 非终端节点 或 分支节点 :度不为零的节点; 父亲节点 或 父节点 :若一个节点含有子节点,则这个节点称为其子节点的父节点; 孩子节点 或 子节点 :一个节点含有的子树的根节点称为该节点的子节点; 兄弟节点 :具有相同父节点的节点互称为兄弟节点; 节点的 层次 :从根开始定义起,根为第1层,根的子节点为第2层,以此类推; 深度 :对于任意节点n,n的深度为从根到n的唯一路径长,根的深度为0; 高度 :对于任意节点n,n的高度为从n到一片树叶的最长路径长,所有树叶的高度为0;