(一)java实现简单二叉树:
树的相关知识可参考:二叉树抽象数据类型
二叉树是每个节点最多有两个子树的有序树
- 二叉树的基本组成是结点,因此要先定义节点类:
- 节点类:左子树,右子树,数据
- 树类:根结点;实现方法…
//结点类
class Node{
Node left; //左子树
Node right; //右子树
int data; //存储的数据
//构造函数
public Node(data){
this.data=data;
}
}
//树类
class Tree{
//定义根结点
public Node root;
//构造函数
public Tree(){
}
//添加子树
public void create(int data){
Node newnode=new Node(data);
if(root==null){
root=newnode;
return;
}else{
while(true){
if(data<root.data){
root=root.left;
if(root!=null){
root=newnode;
break;
}
}
if(data>root.data){
root=root.right;
if(root!=null){
root=newnode;
break;
}
}
}
}
}
(二)二叉树的遍历:
1.递归遍历
只需要调整输出位置即可;
//前序遍历
public void preorder(Node node){
System.out.println(node.data+" ");
preorder(node.left);
preorder(node.right);
}
//中序遍历
public void inorder(Node node){
inorder(node.left);
System.out.println(node.data+" ");
inorder(node.right);
}
//后序遍历
public void aforder(Node node){
aforder(node.left);
afder(node.right);
System.out.println(node.data+" ");
}
2.非递归遍历
非递归遍历需要借助栈,以中序遍历为例;
将左边的子树全部取出压入栈中
//前序遍历
public void preorder(Node node){
Stack<Node> s = new Stack<Node>();
Node p=root;
while(p!=null||s.size()!=0){
while(p!=null){
System.out.println(p.data+" ");
s.push(p);
p=p.left;
}
p=s.pop();
p=p.right;
}
}
//中序遍历
public void inorder(Node node){
Stack<Node> s = new Stack<Node>();
Node p=root;
while(p!=null||s.size()!=0){
while(p!=null){
s.push(p);
p=p.left;
}
p=s.pop();
System.out.println(p.data+" ");
p=p.right;
}
}