研磨数据结构与算法-12遍历二叉树

节点:

/*

* 二叉树节点

*/

public class Node {

//数据项

public long data;

//数据项

public String sData;

//左子节点

public Node leftChild;

//右子节点

public Node rightChild;

/**

* 构造方法

* @param data

*/

public Node(long data,String sData) {

this.data = data;

this.sData = sData;

}

}

二叉树:

/*

* 二叉树类

*/

public class Tree {

//根节点

public Node root;

/**

* 插入节点

* @param value

*/

public void insert(long value,String sValue) {

//封装节点

Node newNode = new Node(value,sValue);

//引用当前节点

Node current = root;

//引用父节点

Node parent;

//如果root为null,也就是第一插入的时候

if(root == null) {

root = newNode;

return;

} else {

while(true) {

//父节点指向当前节点

parent = current;

//如果当前指向的节点数据比插入的要大,则向左走

if(current.data > value) {

current = current.leftChild;

if(current == null) {

parent.leftChild = newNode;

return;

}

} else {

current = current.rightChild;

if(current == null) {

parent.rightChild = newNode;

return;

}

}

}

}

}

/**

* 查找节点

* @param value

*/

public Node find(long value) {

//引用当前节点,从根节点开始

Node current = root;

//循环,只要查找值不等于当前节点的数据项

while(current.data != value) {

//进行比较,比较查找值和当前节点的大小

if(current.data > value) {

current = current.leftChild;

} else {

current = current.rightChild;

}

//如果查找不到

if(current == null) {

return null;

}

}

return current;

}

/**

* 删除节点

* @param value

*/

public void delte(long value) {

}

/**

* 前序遍历

*/

public void frontOrder(Node localNode) {

if(localNode != null) {

//访问根节点

System.out.println(localNode.data + ", " + localNode.sData);

//前序遍历左子树

frontOrder(localNode.leftChild);

//前序遍历右子树

frontOrder(localNode.rightChild);

}

}

/**

* 中序遍历

*/

public void inOrder(Node localNode) {

if(localNode != null) {

//中序遍历左子树

inOrder(localNode.leftChild);

//访问根节点

System.out.println(localNode.data + ", " + localNode.sData);

//中旬遍历右子树

inOrder(localNode.rightChild);

}

}

/**

* 后序遍历

*/

public void afterOrder(Node localNode) {

if(localNode != null) {

//后序遍历左子树

afterOrder(localNode.leftChild);

//后序遍历右子树

afterOrder(localNode.rightChild);

//访问根节点

System.out.println(localNode.data + ", " + localNode.sData);

}

}

}

测试:

public class TestTree {

public static void main(String[] args) {

Tree tree = new Tree();

tree.insert(10,"James");

tree.insert(20,"YAO");

tree.insert(15,"Kobi");

tree.insert(3,"Mac");

tree.insert(4, "Zhangsan");

tree.insert(90, "Lisi");


tree.frontOrder(tree.root);

tree.inOrder(tree.root);

tree.afterOrder(tree.root);

}

}

时间: 2024-10-19 22:45:33

研磨数据结构与算法-12遍历二叉树的相关文章

研磨数据结构与算法-13删除二叉树节点

节点: /* * 二叉树节点 */ public class Node { //数据项 public long data; //数据项 public String sData; //左子节点 public Node leftChild; //右子节点 public Node rightChild; /** * 构造方法 * @param data */ public Node(long data,String sData) { this.data = data; this.sData = sDa

数据结构与算法(c++)——查找二叉树与中序遍历

查找树ADT--查找二叉树 定义:对于树中的每个节点X,它的左子树中的所有项的值小于X中的项,而它的右子树中所有项的值大于X中的项. 现在给出字段和方法定义(BinarySearchTree.h) #include <queue> class BinarySearchTree { private: struct Node { int value; Node* left; Node* right; }; Node* root; void insert(Node*, int); void trav

数据结构与算法的学习-二叉树

二叉树的定义: 二叉树是树形结构的一个重要类型.许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要.    二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成.    这个定义是递归的.由于左.右子树也是二叉树, 因此子树也可为空树. 二叉树的遍历 对于二叉树来讲最主要.最基本的运算是遍历

12.遍历二叉树与二叉树的建立

一.遍历二叉树 1.定义 二叉树的遍历(travering binary tree)是指从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次. 2.前序遍历 (1)规则:若二叉树为空,则空操作返回.否则,先访问根结点,然后前序遍历左子树,再前序遍历右子树. (2)实例 前序遍历结果为:A BDGH CEIF 分析:当最先访问根结点后,然后前序遍历左子树.当访问根的左子树时,这里"前序遍历"即我们将B假设为左子树的根来遍历. (3)算法 从二叉树定义

数据结构与算法04 之二叉树

在有序数组中,可以快速找到特定的值,但是想在有序数组中插入一个新的数据项,就必须首先找出新数据项插入的位置,然后将比新数据项大的数据项向后移动一位,来给新的数据项腾出空间,删除同理,这样移动很费时.显而易见,如果要做很多的插入和删除操作和删除操作,就不该选用有序数组. 另一方面,链表中可以快速添加和删除某个数据项,但是在链表中查找数据项可不容易,必须从头开始访问链表的每一个数据项,直到找到该数据项为止,这个过程很慢. 树这种数据结构,既能像链表那样快速的插入和删除,又能想有序数组那样快速查找.这

【TOJ 1224】数据结构练习题――后序遍历二叉树

Description 给定一颗二叉树,要求输出二叉树的深度以及后序遍历二叉树得到的序列.本题假设二叉树的结点数不超过1000. Input 输入数据分为多组,第一行是测试数据的组数n,下面的n行分别代表一棵二叉树.每棵二叉树的结点均为正整数,数据为0代表当前结点为空,数据为-1代表二叉树数据输入结束,-1不作处理.二叉树的构造按照层次顺序(即第1层1个整数,第2层2个,第3层4个,第4层有8个......,如果某个结点不存在以0代替). Output 输出每棵二叉树的深度以及后序遍历二叉树得到

研磨数据结构与算法-11二叉树的基本操作

节点: /* * 二叉树节点 */ public class Node { //数据项 public long data; //数据项 public String sData; //左子节点 public Node leftChild; //右子节点 public Node rightChild; /** * 构造方法 * @param data */ public Node(long data,String sData) { this.data = data; this.sData = sDa

研磨数据结构与算法-10二叉树的基本概念

二叉树节点: /* * 二叉树节点 */ public class Node { //数据项 public long data; //左子节点 public Node leftChild; //右子节点 public Node rightChild; /** * 构造方法 * @param data */ public Node(long data) { this.data = data; } } 二叉树类: /* * 二叉树类 */ public class Tree { //根节点 priv

java数据结构和算法05(二叉树)

对于树这个数据结构,第一次看到这个树肯定是一脸蒙逼,玛德,树?种树的那个树么?哈哈哈,当然不是,前面我们说过数组添加.删除数据很慢,查询数据很快:而链表添加.删除数据很快,但是查找数据很慢,我们就想啊,有没有一种数据结构取二者之精华,那不就是一个添加,删除,查询都很快的数据结构吗?那用起来多舒服啊! 这个取二者之精华的数据结构就是树(tree),而且随着各种大佬对树这种结构的改进,就有了很多种树,常见的有二叉树,红黑树,2-3-4树等各种树,我们就一起看看这几种简单树到底是什么鬼! 1.树的基本