packagecom.sf.test;importjava.util.ArrayDeque;importjava.util.Queue;importjava.util.Stack;public classTreeMain {public static voidmain(String[] agrs) {int[] arr = {5,17,15,19,4,8,7,10,9,14,16};
TreeNode root= newTreeNode();
root.data= 11;
System.out.println("TreeMain start");//创建二叉树
for(intitem :arr) {
createTree(root,item);
}//先序遍历
System.out.println("先序遍历:");
preOrderTraverse(root);
System.out.println("中序遍历");//中序遍历
midOrderTraverse(root);
System.out.println("后序遍历");//后序遍历
postOrderTraverse(root);
System.out.println("广度遍历");//广度遍历
layOrderTraverse(root);
System.out.println("深度遍历");//深度遍历
deepOrderTraverse(root);//查找节点
find(root,10);
System.out.println("树的高度:"+height(root));
System.out.println("TreeMain end");
}/*** 根据现有数据 生成二叉树
*@paramnode
*@paramdata*/
public static TreeNode createTree(TreeNode node,intdata) {if(null==node) {
node= newTreeNode();
node.data=data;returnnode;
}else{if(data>node.data){
node.right=createTree(node.right,data);
}else{
node.left=createTree(node.left,data);
}
}returnnode;
}/*** 先序遍历
*@paramnode*/
public static voidpreOrderTraverse(TreeNode node) {if(null==node) {return;
}
System.out.println(node.data+",");
preOrderTraverse(node.left);
preOrderTraverse(node.right);
}/*** 中序遍历
*@paramnode*/
public static voidmidOrderTraverse(TreeNode node) {if(null==node) {return;
}
midOrderTraverse(node.left);
System.out.println(node.data+",");
midOrderTraverse(node.right);
}/*** 后序遍历
*@paramnode*/
public static voidpostOrderTraverse(TreeNode node) {if(null==node) {return;
}
postOrderTraverse(node.left);
postOrderTraverse(node.right);
System.out.println(node.data+",");
}/*** 广度遍历
*@paramroot*/
public static voidlayOrderTraverse(TreeNode root) {
Queue q = new ArrayDeque<>();if(null!=root) {
System.out.println(root.data);
q.add(root.left);
q.add(root.right);while(!q.isEmpty()) {
TreeNode node=q.poll();
System.out.println(node.data);if(null!=node.left) {
q.add(node.left);
}if(null!=node.right) {
q.add(node.right);
}
}
}
}/*** 深度遍历
*@paramroot*/
public static voiddeepOrderTraverse(TreeNode root) {
Stack q = new Stack<>();if(null!=root) {
System.out.println(root.data);
q.push(root.right);
q.push(root.left);while(!q.isEmpty()) {
TreeNode node=q.pop();
System.out.println(node.data);if(null!=node.right) {
q.push(node.right);
}if(null!=node.left) {
q.push(node.left);
}
}
}
}/*** 查找节点
*@paramroot 根节点
*@paramdata 数据*/
public static void find(TreeNode node,intdata) {if(null==node) {
System.out.println("没有找到节点");return;
}if(data>node.data){
find(node.right,data);
}else if(data
find(node.left,data);
}else{
System.out.println("找到节点:"+data);
}
}/*** 删除节点
*@paramroot 根节点
*@paramdata 数据*/
public static void delete(TreeNode node,intdata) {if(null==node) {
System.out.println("没有找到节点");return;
}if(data>node.data){
find(node.right,data);
}else if(data
find(node.left,data);
}else{
System.out.println("找到节点:"+data);if(null==node.left||null==node.right) {//直接删除节点,
}else{//取右子树最大的节点替换此节点,自己去实现了(哈哈)
}
}
}/*** 求树的高度
*@paramnode
*@return
*/
public static intheight(TreeNode node) {if(null==node) {return 0;
}int hLeft = height(node.left) +1;int hRight = height(node.right)+1;return hLeft>hRight?hLeft:hRight;
}
}