树是有穷节点的组,其中有一个节点作为根,根下面的其余节点以层次化方式组织。引用其下节点的节点是父节点,类似,由上层节点引用的节点是孩子节点。没有孩子的节点是叶子节点。一个节点可能同时是父节点和子节点。
一个父节点可以引用所需的多个孩子节点。在很多情况下,父节点至多只能引用两个孩子节点,基于这种节点的树称为二叉树。
public class TestBinTree {
public List<Node> createBinTree(int[] array){
List<Node> nodeList = new LinkedList<Node>();
for (int i = 0; i < array.length; i++) {
nodeList.add(new Node(array[i]));
}
for (int i = 0; i < array.length/2-1; i++) {
nodeList.get(i).leftChild = nodeList.get(i*2+1);
nodeList.get(i).rightChild = nodeList.get(i*2+2);
}
int lastIndex = array.length/2-1;
nodeList.get(lastIndex).leftChild = nodeList.get(lastIndex*2+1);
if(array.length%2==1){
nodeList.get(lastIndex).rightChild = nodeList.get(lastIndex*2+2);
}
return nodeList;
}
public List<Node> insert(int obj,List<Node> nodeList){
Node node = new Node(obj);
if(nodeList.size()!=0){
int lastIndex = nodeList.size()/2-1;
if(lastIndex<0){
nodeList.get(0).leftChild = node;
}else{
Node rightChild = nodeList.get(lastIndex).rightChild;
if(rightChild==null){
nodeList.get(lastIndex).rightChild = node;
}else{
nodeList.get(lastIndex+1).leftChild = node;
}
}
}
nodeList.add(node);
return nodeList;
}
public void preOrder(Node node){
if(node==null)
return;
System.out.print(node.data+"\t");
preOrder(node.leftChild);
preOrder(node.rightChild);
}
public void inOrder(Node node){
if(node==null)
return;
inOrder(node.leftChild);
System.out.print(node.data+"\t");
inOrder(node.rightChild);
}
public void postOrder(Node node){
if(node==null)
return;
postOrder(node.leftChild);
postOrder(node.rightChild);
System.out.print(node.data+"\t");
}
public static void main(String[] args) {
TestBinTree testBinTree = new TestBinTree();
int[] array = {1,2,3,4,5,6,7,8,9};
List<Node> nodeList = new LinkedList<Node>();
for (int i = 0; i < array.length; i++) {
nodeList = testBinTree.insert(array[i],nodeList);
}
List<Node> binTree = testBinTree.createBinTree(array);
Node root = binTree.get(0);
// Node root = nodeList.get(0);
System.out.println("先序遍历:");
testBinTree.preOrder(root);
System.out.println();
System.out.println("中序遍历:");
testBinTree.inOrder(root);
System.out.println();
System.out.println("后序遍历:");
testBinTree.postOrder(root);
System.out.println();
}
}
class Node{
Node leftChild;
Node rightChild;
int data;
public Node(int data){
this.data = data;
}
}
分享到:
相关推荐
实现由先序、中序序列构造二叉树,由后序、中序序列构造二叉树,广度优先遍历以root为根结点的子树,中序遍历(递归,非递归)以root为根结点的子树
用C++写的,包括二叉树的构建,二叉树的先序遍历、中序遍历和后序遍历非递归算法。
二叉树是由节点组成的集合,该集合要么为空集(称为空二叉树),要么由一个根节点及两棵分别称为左子树和右子树的不相交的二叉树组成。 #### 二、C语言中的二叉树定义 在C语言中,可以通过结构体来定义二叉树节点...
二叉树的构建及遍历操作,使用链表的形式构建二叉树并进行前序、中序、后序遍历操作
二叉树构建与遍历策略研究
[毕设]二叉树构建与遍历算法实现
本资源“8606-二叉树的构建及遍历操作.rar”着重介绍了如何构建二叉树以及执行常见的遍历算法,适用于数据结构学习和编程实践。 二叉树的构建通常有两种方式:一种是通过序列化数据,如数组或链表,根据特定规则...
标题和描述中提到的任务是实现二叉树的构建、前序遍历和中序遍历。以下是详细的知识点: 1. **二叉树的定义**:二叉树是一种特殊的树结构,每个节点最多有两个子节点,分别称为左孩子和右孩子。二叉树可以为空,...
通过读取用户输入的数据,可以构建一个二叉树。 ```cpp int CreatBiTree(BiTree &root){ char ch; BiTree p; BiTree q[100]; int front = 1, rear = 0; int jj = 0; ch = getchar(); while (ch != '#') { p ...
它接收一个指向二叉树节点指针的指针作为参数,然后根据用户输入的字符(非零表示创建节点,零表示空节点)递归地构建二叉树的结构。输入的字符流决定了二叉树的形态。 接着,提供了四种遍历二叉树的方法: 1. **...
在二叉树的遍历中,有三种主要的方法:先序遍历、中序遍历和后序遍历,它们对于理解和构建二叉树至关重要。 1. 先序遍历(Preorder Traversal): 先序遍历的顺序是根节点 -> 左子树 -> 右子树。用递归的方式表示...
该函数通过前序遍历的方式构建二叉树。当输入为`#`时,表示当前节点为空;否则,创建新节点并递归地构建其左右子树。 3. **后序遍历(`print`函数):** 此函数实现了后序遍历。如果当前节点不为空,则先递归遍历...
在数据库索引构建或查询优化中,中序遍历也可能用于构建或遍历B树等数据结构。 总之,二叉树的中序遍历是数据结构和算法的基础,掌握其原理和实现方式对于提升编程技能和解决实际问题至关重要。无论是面试还是实际...
然后,可以编写对应的输入函数,如从标准输入或文件读取节点值,构建二叉树结构。输出函数则根据遍历结果,打印节点值。 ```c // 先序遍历函数 void preorderTraversal(TreeNode* root) { if (root != NULL) { ...
在实际应用中,二叉树的中序遍历不仅可以用于打印节点值,还可以用于查找特定元素、计算某些属性或构建新的数据结构。递归方法虽然直观,但非递归方法(如使用栈实现)也是常见的选择,尤其在处理大型树时,因为递归...
**前序序列和中序序列构建二叉树**:给定一个二叉树的前序和中序遍历序列,可以唯一确定该二叉树。前序遍历的第一个元素是树的根,中序遍历中根节点左边的元素是左子树的中序遍历,右边的是右子树的中序遍历。通过...
实验分析显示,递归是构建和遍历二叉树的一种强大工具,而栈则用于处理非线性遍历的问题,尤其是在前序遍历中处理右子树。通过这次实验,我们可以深入理解递归算法的工作原理以及数据在栈中的进出过程,这对理解...
在深入探讨C语言实现二叉树的前序遍历(非递归)之前,我们首先应当理解何为二叉树以及前序遍历的基本概念。 ### 二叉树简介 二叉树是一种特殊的树形数据结构,每个节点最多有两个子节点,通常称为左子节点和右子...
// 构建一个完全二叉树 TreeNode* root = new TreeNode(1); root->left = new TreeNode(2); root->right = new TreeNode(3); root->left->left = new TreeNode(4); root->left->right = new TreeNode(5); root->...