先序遍历

二叉树遍历,求深度

匿名 (未验证) 提交于 2019-12-02 23:43:01
2019独角兽企业重金招聘Python工程师标准>>> /** * @title: 二叉树遍历,求深度 * @author : Jay Chang * @version : ver 1.0 * @date : 2009.7.25 */ import java.util.Scanner; /*二叉树的结点的定义*/ class BiTreeNode { private String nodeName; private int value; /*没有解决好lChild,rChild两个属性的封装,存在些问题,不知道为什么,有待改进*/ public BiTreeNode lChild; public BiTreeNode rChild; public BiTreeNode(){} /*创建结点对象的构造器*/ public BiTreeNode(String nodeName,int value) { this.nodeName=nodeName; this.value=value; this.lChild=null; this.rChild=null; } /*setName,getName,setValue,getValue,是对结点两个属性的封装 */ public void setName(String nodeName) { this.nodeName=nodeName; }

实验2:二叉树的创建和遍历

匿名 (未验证) 提交于 2019-12-02 23:36:01
二叉树是树的特殊一种,具有如下特点:1、每个结点最多有两颗子树,结点的度最大为2。2、左子树和右子树是有顺序的,次序不能颠倒。3、即使某结点只有一个子树,也要区分左右子树。 # include < bits / stdc ++. h > # include <queue> # include <iostream> # include <stdio.h> # include <algorithm> # include <string> # define n 6 # define m 2 * n - 1 # define maxval 1 # define maxsize 1024 typedef struct node { char data ; struct node * lc , * rc ; } bitree ; bitree * creatree ( ) { char ch ; bitree * Q [ maxsize ] ; int ffront , rrear ; //表示队头和队尾,建立一个队列储存两个孩子还没有储存完的结点 bitree * root , * s ; //根结点指针和中间变量 root = NULL ; ffront = 1 ; rrear = 0 ; printf ( "请输入二叉树的各结点,@表示虚结点,#表示结束:\n" ) ; scanf (

数据结构-二叉树遍历

匿名 (未验证) 提交于 2019-12-02 22:59:29
这篇博文主要是研究二叉树遍历的递归与非递归算法,有兴趣的小伙伴可以了解下! 二叉树的递归遍历(深度优先遍历) 先来张图,看看各结点遍历时的情况: 二叉树深度优先遍历总结( 分别为第一次,第二次,第三次进入某个结点 ): 先序遍历:先访问根结点,然后先序遍历左子树,最后先序遍历右子树; 根->左->右 中序遍历:先中序遍历左子树,然后访问根结点,最后中序遍历右子树; 左->根->右 后续遍历:先后序遍历左子树,然后后序遍历右子树,最后访问根结点; 左->右->根 递归遍历内部有系统栈,其作用: 1.保护现场(类似存档) 2.恢复现场(类似读档) 递归遍历代码比较简单,先、中、后序遍历递归代码基本相似,总代码: void r(BTNode *p) { if (p != NULL) { //第一次进入-先序 r(p->lchild); //第二次进入-中序 r(p->rchild); //第三次进入-后序 } } 先序遍历递归函数: void r(BTNode *p) { if (p != NULL) { visit(p); r(p->lChild); r(p->rChild); } } 二叉树的非递归遍历(深度优先遍历) 须知:需要自定制辅助栈 1.先序遍历非递归: 1).利用辅助栈将根节点入栈,出栈操作,访问该节点,将其右、左孩子分别入栈(每次访问节点后,对其左、右孩子需要做一个检测

树的遍历 python实现

匿名 (未验证) 提交于 2019-12-02 22:51:30
class Node: def __init__(self, val): self.value = val self.lchild = None self.rchild = None class Tree: def __init__(self): self.root = None def add(self, val): node = Node(val) if self.root is None: self.root = node return queue = [self.root] while queue != []: cur_node = queue.pop(0) if cur_node.lchild is None: cur_node.lchild = node return else: queue.append(cur_node.lchild) if cur_node.rchild is None: cur_node.rchild = node return else: queue.append(cur_node.rchild) # 层次遍历 def breadth_travel(self): if self.root is None: return else: queue = [self.root] while queue != []: cur_node = queue

LeetCode解题汇总目录

a 夏天 提交于 2019-12-02 17:37:52
此篇为学习完 《数据结构与算法之美》 后,在 LeetCode 刷题的汇总目录,方便大家查找(Ctrl+F ind ),一起刷题,一起PK交流!Updated on 2019.12.2 刷题可以按照 不同的专题 进行,便于加强某个知识点的理解。 我的 LeetCode 主页 我的 GitHub 主页 已解决 519/1185 - 简单 281 中等 208 困难 30 2019.7.24 - 2019.11.9,108天做了400道题 2019.11.9 - 2019.11.24, AC+100道,4个月共计500道题 参赛记录 LeetCode 2019 力扣杯全国秋季编程大赛 ​ 已解题目,部分太简单的没有列出 LeetCode 1. 两数之和(哈希) LeetCode 2. 两数相加(单链表反转) LeetCode 3. 无重复字符的最长子串(滑动窗口+哈希) LeetCode 4. 寻找两个有序数组的中位数(二分查找,难) LeetCode 7. 整数反转 LeetCode 8. 字符串转换整数 (atoi) LeetCode 9. 回文数 LeetCode 11. 盛最多水的容器(双指针) LeetCode 14. 最长公共前缀 LeetCode 15. 三数之和 LeetCode 16. 最接近的三数之和(固定左端+滑动窗口) LeetCode 17.

数据结构实验之二叉树三:统计叶子数

血红的双手。 提交于 2019-12-02 14:27:08
数据结构实验之二叉树三:统计叶子数 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 已知二叉树的一个按先序遍历输入的字符序列,如abc,,de,g,,f,,, (其中,表示空结点)。请建立二叉树并求二叉树的叶子结点个数。 Input 连续输入多组数据,每组数据 输入一个长度小于50个字符的字符串。 Output 输出二叉树的叶子结点个数。 Sample Input abc,,de,g,,f,,, Sample Output 3 Hint Source xam 这个题跟上一个树的遍历相差不大,就是在遍历的时候记录一下叶子结点的个数即可,如果树的建立和遍历不熟练的同学可以参考我的上一篇博客,写的比较详细希望能帮到。 链接: 二叉树的建立与遍历 具体见代码注释。 AC代码: #include<bits/stdc++.h> using namespace std; char a[100]; int x,y;//这个y是用来记录最后输出的结果的,因为定义了遍历函数,所以要在宏观上进行定义 //但是y在while循环中要记得定义上y=0,以防多次输入数据的累加而造成输出错误 typedef struct node { int data; struct node*lchild,

与世无争的帅哥 提交于 2019-12-02 11:42:39
树的介绍 1. 树的定义 树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。 把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: (01) 每个节点有零个或多个子节点; (02) 没有父节点的节点称为根节点; (03) 每一个非根节点有且只有一个父节点; (04) 除了根节点外,每个子节点可以分为多个不相交的子树。 2. 树的基本术语 若一个结点有子树,那么该结点称为子树根的"双亲",子树的根是该结点的"孩子"。有相同双亲的结点互为"兄弟"。一个结点的所有子树上的任何结点都是该结点的后裔。从根结点到某个结点的路径上的所有结点都是该结点的祖先。 结点的度 :结点拥有的子树的数目。 叶子 :度为零的结点。 分支结点 :度不为零的结点。 树的度 :树中结点的最大的度。 层次 :根结点的层次为1,其余结点的层次等于该结点的双亲结点的层次加1。 树的高度 :树中结点的最大层次。 无序树 :如果树中结点的各子树之间的次序是不重要的,可以交换位置。 有序树 :如果树中结点的各子树之间的次序是重要的, 不可以交换位置。 森林 :0个或多个不相交的树组成。对森林加上一个根,森林即成为树;删去根,树即成为森林。 二叉树的介绍 1. 二叉树的定义 二叉树是每个节点最多有两个子树的树结构。它有五种基本形态:二叉树可以是空集

二叉树创立及遍历

六眼飞鱼酱① 提交于 2019-12-01 18:25:25
编写程序实现二叉树的创建,先序、中序、后序的递归遍历算法。在此基础上设计一个主程序完成如下功能: (1 )依次读入字符 “ABD∅∅E∅∅C∅FG∅∅H∅∅” , 按照先序建立二叉树T(∅表示空格); ( 2)先序递归遍历二叉树T,输出遍历序列; ( 3)中序递归遍历二叉树T,输出遍历序列; (4 )后序递归遍历二叉树 T,输出遍历序列。 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define MAXSIZE 70 typedef struct BiTreeNode { char data; struct BiTreeNode *left; struct BiTreeNode *right; }BiTreeNode, *BiTree; void CreateBiTree(BiTree *T) { char val; scanf_s("%c", &val); if (val == '0') *T = NULL; //null表示为空枝 else { *T = (BiTree)malloc(sizeof(BiTreeNode)); (*T)->data = val; CreateBiTree(&(*T)->left); CreateBiTree(&(*T)->right); } } void

**LeetCode-145二叉树后序遍历

旧时模样 提交于 2019-12-01 09:55:54
问题: 后序遍历二叉树 分析:非递归后序遍历二叉树。直接后序遍历的话会很麻烦,所以我们要想一些精妙的方法,将后序遍历改成先序遍历并满足以下两个条件即可。 1.使用链表头插法来进行先序遍历。 2.先遍历右子树再遍历左子树即可(借助栈实现,先将左节点压栈,再将右节点压栈)。 代码: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public List<Integer> postorderTraversal(TreeNode root) { LinkedList<Integer> output = new LinkedList(); if(root==null){ return output; } Stack s = new Stack(); TreeNode node; s.push(root); while(!s.empty()){ //注意记忆循环条件 node = (TreeNode)s.pop(); output.addFirst(node.val); if(node.left!=null){

数据结构与算法之二叉树

馋奶兔 提交于 2019-12-01 09:32:12
树 树的概念 树(英语:tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合。它是由n(n>=0)个有限节点组成一个具有层次关系的集合。把它叫做“ 树 ”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 当n=0时,为空树,在任何一棵空树中: 有且仅有一个特定的称为根(Root)的节点 当n>1时: 除根节点外,其余节点可分为m(m>0)个互不相交的有限集T1、T2、…、Tm,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。 每个节点有零个或多个子节点; 没有父节点的节点称为根节点; 每一个非根节点有且只有一个父节点; 除了根节点外,每个子节点可以分为多个不相交的子树; 树的术语 节点的度 :一个节点含有的子节点的个数称为该节点的度。 B的子节点为D、E、F, 因此,节点B的度为3。 树的度 :一棵树中,最大的节点的度称为树的度。 最大的节点的度为B节点的度,因此该树的度为3。 叶节点 或 终端节点 :度为零的节点。 不能往下再分的节点:K、J、F、L、O、P。 父亲节点 或 父节点 :若一个节点含有子节点,则这个节点称为其子节点的父节点。 如:K的父节点为I。 孩子节点或子节点 :一个节点含有的子树的根节点称为该节点的子节点。 B的孩子节点或子节点为:D、E、F。 兄弟节点