怎么用java先序创建二叉树?(说的详细些)
[align=center]
先序是个什么概念?
二叉树又是个什么概念?
怎么用先序来创建二叉树???[/align]
------最佳解决方案--------------------递归方法前序遍历
public class BinaryTree<E>{//二叉树类
public BinaryNode<E> root;//根结点
public E data;//数据元素
public BinaryNode<E> left,right;//分别指向左、右孩子的结点
public BinaryTree(){//构造空二叉树
this.root = null;
}
public BinaryTree(BinaryNode<E> root){//构造指定根结点的二叉树
this.root = root;
}
public boolean isEmpty(){//判断是否是空二叉树
return this.root == null;
}
public BinaryNode<E> getRoot(){//返回二叉树的根结点
return this.root;
}
//三种次序遍历的成员方法
public void preOrder(){//先根次序遍历二叉树
System.out.print("\n先根序列: ");
preOrder(root);
}
private void preOrder(BinaryNode<E> p){//先根次序遍历以p结点为根的子树
if(p != null){//若二叉树不空
System.out.print(p.data + " ");//访问当前结点
preOrder(p.left);//访问根次序遍历当前结点的左子树
preOrder(p.right);//访问根次序遍历当前结点的右子树
}
}
//非递归方法中序遍历二叉树
public void inOrder(){
System.out.print("\n中根序列(非递归): ");
LinkedStack<BinaryNode<E>> stack = new LinkedStack<BinaryNode<E>>();
BinaryNode<E> p = this.root;
while(p != null
------其他解决方案-------------------- !stack.isEmpty()){//p非空或栈非空时
if(p != null){
stack.push(p);//p结点入栈
p = p.left;//进入左子树
}else{
p = stack.pop();//p指向出栈结点
System.out.print(p.data + " ");
p = p.right;//进入右子树
}
}
}
/**
*递归方法中序二叉树遍历
* public void inOrder(){//中根次序遍历二叉树
*
* System.out.print("\n中根序列: ");
* inOrder(root);
* }
*
* private void inOrder(BinaryNode<E> p){//中根次序遍历以p结点为根的子树
*
* if(p != null){//若二叉树不空
*
* inOrder(p.left);//访问根次序遍历当前结点的左子树
* System.out.print(p.data + " ");//访问当前结点
* inOrder(p.right);//访问根次序遍历当前结点的右子树
* }
* }
*/
public void postOrder(){//后根次序遍历二叉树
System.out.print("\n后根序列: ");
postOrder(root);
}
private void postOrder(BinaryNode<E> p){//后根次序遍历以p结点为根的子树
if(p != null){//若二叉树不空
postOrder(p.left);//访问根次序遍历当前结点的左子树