java实现二叉树的常见操作(二)

2014-11-24 02:57:47 · 作者: · 浏览: 1
点是否为空
if(root == null){
return str.toString();
}else{
//输出节点的值
if(root.getData() != null){
str.append(root.getData().getNodeva lue()+",");
}else{
str.append("null,");
}
//递归输出左孩子的值
str.append(middleIterator(root.getLeftNode()));
//递归输出右孩子的值 www.2cto.com
str.append(middleIterator(root.getRightNode()));
}
return str.toString();
}

/**
* 后序遍历二叉树
* @author letthinking
* @param root
* @return
*/
public String afterIterator(TreeNode root){
StringBuilder str = new StringBuilder();
//判断节点是否为空
if(root == null){
return str.toString();
}else{
//递归输出左孩子的值
str.append(afterIterator(root.getLeftNode()));
//递归输出右孩子的值
str.append(afterIterator(root.getRightNode()));
//输出节点的值
if(root.getData() != null){
str.append(root.getData().getNodeva lue()+",");
}else{
str.append("null,");
}
}
return str.toString();
}

/**
* 求树的深度
* @author letthinking
* @param node
* @return
*/
public int treeDepth(TreeNode node){
//定义两个变量用来存储左深度和右深度
int leftDepth = 0;
int rightDepth = 0;
if(node == null){
return 0;
}else{
leftDepth = treeDepth(node.getLeftNode())+1;
rightDepth = treeDepth(node.getRightNode())+1;
}
//返回值最大的深度
return leftDepth>=rightDepth leftDepth:rightDepth;
}

public static void main(String [] args){

//构造一个只有根节点的空树
Tree tree = new Tree(35);
//创建5个节点
TreeNode treeNode = new TreeNode();
treeNode.getData().setNodeva lue(23);
TreeNode treeNode1 = new TreeNode();
treeNode1.getData().setNodeva lue(56);
TreeNode treeNode2 = new TreeNode();
treeNode2.getData().setNodeva lue(45);
TreeNode treeNode3 = new TreeNode();
treeNode3.getData().setNodeva lue(12);
TreeNode treeNode4 = new TreeNode();
treeNode4.getData().setNodeva lue(37);
TreeNode treeNode5 = new TreeNode();
treeNode5.getData().setNodeva lue(19);
//插入树中
tree.insert(tree.root, treeNode);
tree.insert(tree.root, treeNode1);
tree.insert(tree.root, treeNode2);
tree.insert(tree.root, treeNode3);
tree.insert(tree.root, treeNode4);
tree.insert(tree.root, treeNode5);
//前序变量
String result = tree.middleIterator(tree.getRoot());
System.out.println(result);
//后序序变量
result = tree.afterIterator(tree.getRoot());
System.out.println(result);
//清空数所有节点的值
tree.clearTree(tree.getRoot());
result = tree.middleIterator(tree.getRoot());
System.out.println(result);
//得到树的深度
System.out.println(tree.treeDepth(tree.getRoot()));
}
}
可能会有地方写的不对,希望大家给指出。

摘自:letthinking的专栏