package create; import java.util.Stack; /** * 创建二叉排序树,二叉树的六种遍历 * @author root * */ public class BiTree { static class Node{ int value; Node left = null; Node right = null; public Node(int value){ this.value = value; } } public static void main(String[] args) { // TODO Auto-generated method stub int []data = {6,5,3,4,2,8,7,9,1}; BiTree bt = new BiTree(); Node root = bt.creatBiTree(data); System.out.println(bt.getDepth(root)); } //创建二叉排序树 public Node creatBiTree(int []data){ Node root = new Node(data[0]); for(int i=1; i<data.length; i++){ insert(root, data[i]); } return root; } //插入节点 public void insert(Node root, int value){ if(value<root.value){ if(root.left==null){ root.left = new Node(value); }else{ insert(root.left, value); } }else{ if(root.right==null){ root.right = new Node(value); }else{ insert(root.right, value); } } } //得到树的深度 public int getDepth(Node root){ int depth = 0; int left = 0; int right = 0; if(root!=null){ depth++; left = getDepth(root.left); right = getDepth(root.right); } return depth+(left>right?left:right); } //递归先序遍历 public void preOrderTraverse(Node root){ if(root!=null){ System.out.println(root.value); preOrderTraverse(root.left); preOrderTraverse(root.right); } } //循环先序遍历 public void cyclePreOrderTraverse(Node root){ Stack<Node> stack = new Stack<Node>(); Node node = root; while(node!=null||!stack.isEmpty()){ while(node!=null){ stack.push(node); System.out.println(node.value); node=node.left; } if(!stack.isEmpty()){ node = stack.pop(); node = node.right; } } } //递归中序遍历 public void inOrderTraverse(Node root){ if(root!=null){ inOrderTraverse(root.left); System.out.println(root.value); inOrderTraverse(root.right); } } //循环中序遍历 public void cycleInOrderTraverse(Node root){ Stack<Node> stack = new Stack<Node>(); Node node = root; while(node!=null||!stack.isEmpty()){ while(node!=null){ stack.push(node); node=node.left; } if(!stack.isEmpty()){ node = stack.pop(); System.out.println(node.value); node = node.right; } } } //递归后序遍历 public void postOrderTraverse(Node root){ if(root!=null){ postOrderTraverse(root.left); postOrderTraverse(root.right); System.out.println(root.value); } } //循环后序遍历 public void cyclePostOrderTraverse(Node root){ Stack<Node> stack = new Stack<Node>(); Node node = root; stack.push(root); Node pre = null; while(!stack.isEmpty()){ node = stack.peek(); if(node.left==null && node.right==null || pre!=null && (pre==node.left || pre==node.right)){ System.out.println(node.value); stack.pop(); pre = node; }else{ if(node.right!=null){ stack.push(node.right); } if(node.left!=null){ stack.push(node.left); } } } } }