采用的是中序递归建树和中序递归遍历。
代码如下:
package treeByMyself;
public class TreeNode {
private int root;
private TreeNode leftTreeNode;
private TreeNode rightTreeNode;
public int getRoot() {
return root;
}
public void setRoot(int root) {
this.root = root;
}
public TreeNode getLeftTreeNode() {
return leftTreeNode;
}
public void setLeftTreeNode(TreeNode leftTreeNode) {
this.leftTreeNode = leftTreeNode;
}
public TreeNode getRightTreeNode() {
return rightTreeNode;
}
public void setRightTreeNode(TreeNode rightTreeNode) {
this.rightTreeNode = rightTreeNode;
}
}
package treeByMyself;
public class Count {
public static int count;
}
package treeByMyself;
public class BinaryTree {
TreeNode root;
public BinaryTree(){
root = new TreeNode();
}
//中序建树
public TreeNode BuildBinaryTree(TreeNode rt, int[] a, int i){
if(i < a.length ){
if(a[i]==0){
return null;
}else{
TreeNode ln = new TreeNode();
TreeNode rn = new TreeNode();
rt.setRoot(a[i]);
rt.setLeftTreeNode(BuildBinaryTree(ln,a,++Count.count));
rt.setRightTreeNode(BuildBinaryTree(rn,a,++Count.count));
}
}
return rt;
}
//中序遍历(递归)
public int InorderTravese(TreeNode rt){
if(rt != null){
System.out.println(rt.getRoot());
InorderTravese(rt.getLeftTreeNode());
InorderTravese(rt.getRightTreeNode());
}
return 0;
}
}
package treeByMyself;
public class TreeTest {
public static void main(String[] args){
BinaryTree bt = new BinaryTree();
int[] a = {1,2,3,0,0,4,0,0,5,0,0};
bt.BuildBinaryTree(bt.root, a, Count.count);
bt.InorderTravese(bt.root);
}
}
最后,这是我边学边写的,望大家批判的吸收。