第十章 基本数据结构 练习 10.4-4


package chap10;

import static org.junit.Assert.*;

import java.util.Stack;

import org.junit.Test;

public class exec10_4_4 {
/**
* 将该树打印
*
* @param tree
*/
static void printTree(TreeWithRoot tree) {
printNode(tree.root.node);
}

/**
* 遍历一个树的非递归方法,用一个栈实现
*
* @param node
*/
static void printNode(Node1 node) {
if (node == null) {
System.err.println("tree is null");
}
Stack<Node1> nodes = new Stack<Node1>();

do {
System.out.print(node.key + " ");
if (node.right_sibling != null) {
nodes.push(node.right_sibling);
}
if (node.left != null) {
node = node.left;
} else {
node = nodes.pop();
}
} while (nodes != null);
}

/**
* 创建一个树,弱智方法
*
* @return
*/
static TreeWithRoot creatTree() {
TreeWithRoot t = new TreeWithRoot();
Root1 r = new Root1();
Node1 n1, n2, n3, n4, n5, n6, n7, n8, n9, n0;
n1 = new Node1(0);
n2 = new Node1(1);
n3 = new Node1(2);
n4 = new Node1(3);
n5 = new Node1(4);
n6 = new Node1(5);
n7 = new Node1(6);
n8 = new Node1(7);
n9 = new Node1(8);
n0 = new Node1(9);

t.root = r;
r.node = n0;
n0.left = n1;
n1.right_sibling = n2;
n2.left = n3;
n3.right_sibling = n4;
n3.left = n5;
n5.left = n6;
n6.right_sibling = n7;
n7.right_sibling = n8;
n7.left = n9;
return t;
}

@Test
public void testName() throws Exception {
TreeWithRoot t1 = creatTree();
printTree(t1);

}
}


我在

第十章 基本数据结构 练习 10.4-4,布布扣,bubuko.com

时间: 2024-10-26 23:37:05

第十章 基本数据结构 练习 10.4-4的相关文章

小朋友学数据结构(10):基数排序

小朋友学数据结构(10):基数排序 一.基本思想 将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零.然后,从最低位(即个位数)开始,依次进行一次排序.这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列. 与其他排序不同的是,基数排序不涉及数的交换. 基数排序是一种稳定的排序算法. 8.png 二.主要步骤 从上面的计算过程,咱们可以看出,基数排序主要有三个步骤: 1.把所有元素都分配到相应的桶中(因为整数每位数有0~9共十种可能,所以通常需要10个桶) 2.把

第十章 基本数据结构

摘要 本章介绍了几种基本的数据结构,包括栈.队列.链表以及有根树,讨论了使用指针的简单数据结构来表示动态集合.本章的内容对于学过数据结构的人来说,没有什么难处,简单的总结一下. 1.栈和队列 栈和队列都是动态集合,元素的出入是规定好的.栈规定元素是先进后出(FILO),队列规定元素是先进先出(FIFO).栈和队列的实现可以采用数组和链表进行实现.在标准模块库STL中有具体的应用,可以参考http://www.cplusplus.com/reference/. 栈的基本操作包括入栈push和出栈p

第十章 基本数据结构——链表

 链表 链表与数组的区别是链表中的元素顺序是有各对象中的指针决定的,相邻元素之间在物理内存上不一定相邻.采用链表可以灵活地表示动态集合.链表有单链表和双链表及循环链表.书中着重介绍了双链表的概念及操作,双链表L的每一个元素是一个对象,每个对象包含一个关键字和两个指针:next和prev.链表的操作包括插入一个节点.删除一个节点和查找一个节点,重点来说一下双向链表的插入和删除节点操作,图例如下: 链表是最基本的数据结构,凡是学计算机的必须的掌握的,在面试的时候经常被问到,关于链表的实现,百度一下就

数据结构基础(10) --单链表迭代器的设计与实现

为了向 STL 致敬(O(∩_∩)O~), 我们模仿STL中的list的迭代器, 我们也自己实现一个MyList的迭代器, 以供遍历整个链表的所有元素: 首先:Node节点需要做如下修改(注意后缀有+的代码) //链表节点 template <typename Type> class Node { friend class MyList<Type>; friend class ListIterator<Type>; //+ template <typename T

第十章 基本数据结构——二叉树

摘要 书中第10章10.4小节介绍了有根树,简单介绍了二叉树和分支数目无限制的有根树的存储结构,而没有关于二叉树的遍历过程.为此对二叉树做个简单的总结,介绍一下二叉树基本概念.性质.二叉树的存储结构和遍历过程,主要包括先根遍历.中根遍历.后根遍历和层次遍历. 1.二叉树的定义 二叉树(Binary Tree)是一种特殊的树型结构,每个节点至多有两棵子树,且二叉树的子树有左右之分,次序不能颠倒. 由定义可知,二叉树中不存在度(结点拥有的子树数目)大于2的节点.二叉树形状如下下图所示: 2.二叉树的

算法与数据结构基础10:C++实现——拓扑排序

一 定义 拓扑排序是对有向无环图(Directed Acyclic Graph简称DAG)顶点的一种排序, 它使得如果存在一条从顶点A到顶点B的路径,那么在排序中B出现在A的后面. 二 先决条件 能够进行拓扑排序图有两个先决条件:有向.无环,即有向无环图. 三 偏序全序 连通图:任意两点之间都存在至少一条边 偏序:非连通图(有向无环图满足偏序关系) 全序:单连通图 四 结果唯一性 对于仅满足偏序关系的有向无环图中,因为有两个点之间的关系是不确定的,所以导致排序的结果是不唯一的. 满足全序关系的有

【数据结构】10分钟教你用栈求解迷宫老鼠问题超详细教程附C++源代码

问题描述 给定一张迷宫地图和一个迷宫入口,然后进入迷宫探索找到一个出口.如下图所示: 该图是一个矩形区域,有一个入口和出口.迷宫内部包含不能穿越的墙壁或者障碍物.这些障碍物沿着行和列放置,与迷宫的边界平行.迷宫的入口在左上角,出口在右下角. 问题分析 首先要有一张迷宫地图,地图由两部分组成: (1)一是迷宫中各处的位置坐标, (2)二是迷宫各位置处的状态信息,即该处是墙还是路 所以,该迷宫地图可由一个二维数组来表示.数组的横纵坐标表示迷宫各处的位置坐标,数组元素表示各位置处的状态信息. 2.在这

数据结构-第10周作业(二叉树的创建和遍历算法)

算法导论笔记——第十~十一章 数据结构(一) 散列

第十章 基本数据结构 栈:可由数组表示 队列:可由数组表示 指针和对象:可由多数组表示.可用栈表示free list 有根数: 二叉树:左右孩子 分支无限制:左孩子右兄弟表示法 第十一章 散列表 数组:为每个元素保留一个位置 散列表:用于实际存储关键字比全部可能关键字少很多时,比如字典操作 解决散列冲突:链接法,开放寻址法 11.2 散列表 用链表法,在简单均匀散列的假设下,一次成功或不成功的查找所需要的平均时间为Θ(1+α),α为load factor. 11.3 散列函数 好的散列函数应(近