下面是一维数组存储结构示意图
由上面来看这个一维数组存储结构很简单,这里是一颗完全二叉树所以在一维数组里面没有造成内存的浪费。但是如果不是一个完全或者满二叉树的话,并且仍然采取顺序存储结构的话就会造成大量的内存单元浪费,因为我们必须给二叉树添上一些虚构的不存在的结点,这是资源浪费一方面。另一方面是如果这棵二叉树存在大量的插入和删除等操作就会出现运算的不方便,因为我们插入或者删除一个结点就会造成大量的其他结点的移动。所以基于以上等各方面的原因,对于一般的二叉树而言我们都采用的是链式存储结构。
2、链式存储结构
由于在二叉树每个结点都最多有两个孩子,所以一般来说每个链结点都有三个域,分别是左孩子指针域、数据域、右孩子指针域。结构图如下:
3、二叉树的运算
遍历二叉树是二叉树中的一个重要运算,同时也是二叉树其他运算的基础。二叉树的遍历大致可以分为三种遍历方式,主要是根据二叉树的遍历顺序来区分。
访问根结点
按前序遍历根结点的右孩子树
按中序遍历根结点的左孩子树
按中序遍历根结点的右孩子树
后序遍历
按后序遍历根结点的右孩子树[/size]
[size=10.5000pt; font-family: '宋体';]package com.bes.bintree.test;
public class Node {
private Node leftChild ;
private Node rightChild;
private int data;
public Node(){
}
public Node(int data){
this.data = data;
}
public Node getLeftChild() {
return leftChild;
}
public void setLeftChild(Node leftChild) {
this.leftChild = leftChild;
}
public Node getRightChild() {
return rightChild;
}
public void setRightChild(Node rightChild) {
this.rightChild = rightChild;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
}
package com.bes.bintree.test;
import java.util.Scanner;
public class CreateTree {
static int array[] = {23,10,0,88,0,0,15,0,34,0,0,0};
public static void main(String args[]) {
Node node = null;
Scanner scanner = new Scanner(System.in);
node = createTreeNode(node, scanner);
System.out.println("中序遍历");
inOrder(node);
System.out.println("前序遍历");
preOrder(node);
System.out.println("后序遍历");
postOrder(node);
}
/**
* 构建二叉树
* @param node
* @param scanner
* @return
*/
private static Node createTreeNode(Node node,Scanner scanner) {
int data = scanner.nextInt();
if (data == 0) {
return null;
}else {
node = new Node(data);
node.setLeftChild(createTreeNode(node.getLeftChild(), scanner));
node.setRightChild(createTreeNode(node.getRightChild(),scanner));
}
return node;
}
/**
* 中序遍历
* @param node
*/
private static void inOrder(Node node) {
if (node != null) {
inOrder(node.getLeftChild());
System.out.println(node.getData());
inOrder(node.getRightChild());
}
}
/**
* 前序遍历
* @param node
*/
private static void preOrder(Node node) {
if(node != null) {
System.out.println(node.getData());
preOrder(node.getLeftChild());
preOrder(node.getRightChild());
}
}
/**
* 后序遍历
* @param node
*/
private static void postOrder(Node node) {
if (node != null) {
postOrder(node.getLeftChild());
postOrder(node.getRightChild());
System.out.println(node.getData());
}
}
}
[/size]
[/align]
分享到:
相关推荐
在本话题中,我们将重点讨论链式二叉树的中序遍历,包括递归和非递归的方法,以及如何创建和销毁这种数据结构。 一、链式二叉树的中序创建 中序创建链式二叉树通常涉及自底向上的构建过程。首先,我们需要创建一个...
本课程设计将详细介绍如何使用Java编程语言实现二叉树的中序遍历。 首先,我们先构建二叉树的节点类(Node),它包含一个数据字段(data)以及指向左子节点(left)和右子节点(right)的引用: ```java public ...
在计算机科学中,二叉树是一种特殊的图结构,其中每个节点最多有两个子节点...通过递归或非递归遍历,我们可以有效地访问和操作二叉树中的每一个节点。了解这些基本概念和实现方法对于深入理解数据结构和算法至关重要。
排序二叉树的基础代码,包含递归非递归二叉树构建、递归非递归遍历,获取最小最大值。
在计算机科学中,二叉树是一种特殊...理解这三种遍历方式有助于解决各种问题,例如复制二叉树、构建平衡树、求解路径和序列化/反序列化二叉树等。同时,遍历也是构建其他复杂算法的基础,比如树的拓扑排序或层次遍历。
在Java中,这可以通过递归或者栈实现,迭代器模式可以将这个过程封装起来,使得遍历更加简洁易懂。 **中序遍历**是另一种遍历方式,它的顺序是:左子树 -> 根节点 -> 右子树。对于二叉搜索树,中序遍历可以得到升序...
二叉树可以手动构建,也可以通过数组、链表或其他数据结构动态生成。例如,如果给定一个序列化的二叉树表示(如`[1, 2, 3, null, 4, 5]`),我们可以根据这个序列来重建二叉树。在Python中,可以使用递归函数实现: ...
总结一下,从前序遍历序列构建二叉树的关键在于理解前序遍历的规律,并利用递归或栈来处理子序列。而中序遍历则可以用来验证所构建的二叉树是否正确,因为对于任何有效的二叉树,其前序遍历和中序遍历结合可以唯一...
在Java中实现二叉树的最佳方法涉及对其逻辑结构和存储结构的理解,以及如何通过代码高效地构建和遍历二叉树。 首先,数据结构可以按逻辑结构分类,其中二叉树属于非线性结构。二叉树的逻辑分类是基于节点与子树之间...
在Java中,实现这些遍历方法可以使用`Node`类来表示二叉树的节点,包含节点值、左子节点和右子节点。对于递归版本,可以直接在方法内实现;对于非递归版本,可以使用`java.util.Stack`来辅助实现。 例如,对于前序...
总的来说,Java中的二叉树是数据结构与算法学习的重要部分,掌握其生成与遍历对于提升编程能力非常有益。通过练习和实践,你可以更好地理解和运用二叉树在各种场景下的优势。在提供的`BinaryTree`项目中,你将找到更...
Java实现的二叉树常用操作是指使用Java语言来实现二叉树的各种操作,包括前序建树、前中后递归非递归遍历、层序遍历等。下面我们将详细介绍这些操作的实现方法。 一、前序建树 前序建树是指从一个数组中构建一个...
在递归构建子树的过程中,我们可以记录每个节点的后序遍历顺序,从而得到整个二叉树的后序遍历序列。 在Java中,我们可以定义一个`BinaryTreeBuilder`类来实现这个过程。该类可能包含以下方法: - `buildTree(int...
中序遍历是一种遍历二叉树的方式,它的顺序是先遍历左子树,然后遍历根节点,最后遍历右子树。 后序遍历 后序遍历也是遍历二叉树的一种方式,它的顺序是先遍历左子树,然后遍历右子树,最后遍历根节点。 构建...
在实际编程中,我们通常会创建一个`BinaryTree`类来封装这些操作,并提供构建二叉树、打印遍历结果等方法。在给定的`BinTreeTest`文件中,可能包含了具体的测试用例,用于验证这些遍历方法的正确性。 总结来说,...
本篇文章将详细探讨如何在Java中创建二叉树以及进行前、中、后序遍历。 首先,我们理解二叉树的基本概念。二叉树是一种特殊的树结构,每个节点最多有两个子节点,通常称为左子节点和右子节点。二叉树可以用来表示...
本资源主要关注如何使用Java集合框架来递归实现一个通用的树结构,即`Tree`。下面我们将深入探讨这个主题。 首先,我们要了解Java集合框架。Java集合框架是Java语言提供的一组接口和类,用于存储和操作各种数据结构...
遍历二叉树指的是按照某种特定的顺序访问二叉树的每一个节点,确保每个节点被访问一次。常见的二叉树遍历方式有前序遍历、中序遍历和后序遍历。前序遍历首先访问根节点,然后递归地进行左子树的遍历,接着递归地进行...
本话题主要涉及使用Java语言,通过给定的前序和中序遍历结果来构造二叉树,以及对构造出的二叉树进行后序遍历和判断是否为平衡二叉树。以下是关于这些知识点的详细解释: 1. **二叉树**: 二叉树是一种特殊的树形...