文章目录
代码
本篇博客提供以下功能的代码:
- 用户输入字符序列,生成二叉树,并用二叉链表存储
- 二叉树的前序、中序、后序递归遍历
- 二叉树的前序、中序非递归遍历
二叉树结点类
public class BinaryNode<T> {
public T data;
public BinaryNode<T> left;
public BinaryNode<T> right;
public BinaryNode()
{
this.data=null;
this.left=null;
this.right=null;
}
public BinaryNode(T data)
{
this.data=data;
this.left=null;
this.right=null;
}
public BinaryNode(T data,BinaryNode<T> left,BinaryNode<T> right)
{
this.data=data;
this.left=left;
this.right=right;
}
}
二叉树实现类
public class BinaryTree<T> {
public BinaryNode<T> root;
static int i=0;
public BinaryTree(T[] arr)
{
this.root=CreateTree(arr);
System.out.println("创建成功");
}
//构造
private BinaryNode<T> CreateTree(T[] arr)
{
BinaryNode<T> p=null;
if(this.i<arr.length)
{
if(arr[this.i]!=(T)null)
{
p=new BinaryNode<T>(arr[i]);
this.i++;
p.left=CreateTree(arr);
p.right=CreateTree(arr);
}
else
{
this.i++;
}
}
return p;
}
//递归遍历
//先序遍历 根左右
public void PreOrder(BinaryNode<T> root)
{
if(root!=null)
{
System.out.println(root.data);
PreOrder(root.left);
PreOrder(root.right);
}
}
//中序遍历 左根右
public void InOrder(BinaryNode<T> root)
{
if(root!=null)
{
InOrder(root.left);
System.out.println(root.data);
InOrder(root.right);
}
}
//后序遍历 左右根
public void PostOrder(BinaryNode<T> root)
{
if(root!=null)
{
PostOrder(root.left);
PostOrder(root.right);
System.out.println(root.data);
}
}
//非递归遍历
public void preOrder(BinaryNode<T> root)
{
SeqStack<BinaryNode> st=new SeqStack<>();
BinaryNode<T> temp=root;
if(temp!=null)
st.push(temp);
while(!st.isEmpty())
{
temp=st.pop();
System.out.println(temp.data);
if(temp.right!=null)
st.push(temp.right);
if(temp.left!=null)
st.push(temp.left);
}
}
//
public void inOrder(BinaryNode<T> root)
{
SeqStack<BinaryNode> st=new SeqStack<>();
BinaryNode<T> temp=root;
while(!st.isEmpty()||temp!=null)
{
//从某节点出发边压栈边找到该结点的最左叶子结点
while(temp!=null)
{
st.push(temp);
temp=temp.left;
}
if(!st.isEmpty())
{
temp=st.pop();
System.out.println(temp.data);
temp=temp.right;
}
}
}
}
注意:本篇博客二叉树的前序、中序非递归遍历均是借助栈实现的。关于栈接口和栈的实现类在上篇博文中。请大家移步,嘻嘻嘻。
测试类
public class Test {
public static void main(String[] args)
{
String[] arr ={"A","B","C",null,null,"D","E",null,"G",null,null,"F",null,null,null};
BinaryTree<String> tree=new BinaryTree<String>(arr);
Scanner input=new Scanner(System.in);
tree.inOrder(tree.root);
}
}