二叉树
1、二叉树三个节点构成,分别是根、左、右。
如果需要进行二叉树遍历,则数据必须先排序(冒泡排序/快速排序/选择排序)
原则:左子树一定小于等于根,右子树一定大于根
遍历方式:
1、先序遍历:根左右
2、中序遍历:左根右
3、右序遍历/后序遍历:左右根
节点代码:
package cn.xiang.tree.binaryTree; public class NodeTreeDemo { int data; NodeTreeDemo left; NodeTreeDemo right; public NodeTreeDemo(){ } public NodeTreeDemo(int data){ this.data = data; left = null; right = null; } public void insert(NodeTreeDemo root,int data){ /*if(root.data>data){ if(root.left==null){ root.left = new NodeTreeDemo(data); }else{ this.insert(root.left, data); } }else{ if(root.right==null){ root.right = new NodeTreeDemo(data); }else{ this.insert(root.right, data); } }*/ if(data>root.data){ //如果插入的节点大于跟节点 if(root.right==null){ //如果右子树为空,就插入,如果不为空就再创建一个节点 root.right=new NodeTreeDemo(data); //就把插入的节点放在右边 }else{ this.insert(root.right, data); } }else{ //如果插入的节点小于根节点 if(root.left==null){ //如果左子树为空,就插入,如果不为空就再创建一个节点 root.left=new NodeTreeDemo(data); //就把插入的节点放在左边边 }else{ this.insert(root.left, data); } } } @Override public String toString() { return "NodeTree [data=" + data + ", left=" + left + ", right=" + right + "]"; } }
查询执行代码
package cn.xiang.tree.binaryTree; public class NodeQueryDemo { public static void main(String[] args) { int[] array = {35,66,39,33,28,65,56,87}; NodeTreeDemo root = new NodeTreeDemo(array[0]); for (int i = 1; i < array.length; i++) { root.insert(root, array[i]); } System.out.println(root); System.out.println("先序遍历"); preOrder(root); System.out.println(" 先序遍历"); inOrder(root); System.out.println(" 后序遍历"); postOrder(root); } //先序遍历 public static void preOrder(NodeTreeDemo root){ if(root!=null){ System.out.print(root.data+"-"); preOrder(root.left); preOrder(root.right); } } //中序遍历 public static void inOrder(NodeTreeDemo root){ if(root!=null){ inOrder(root.left); System.out.print(root.data+"-"); inOrder(root.right); } } //后序遍历 public static void postOrder(NodeTreeDemo root){ if(root!=null){ postOrder(root.left); postOrder(root.right); System.out.print(root.data+"-"); } } }
先序遍历:
public static void preOrder(NodeTreeDemo root){ if(root!=null){ System.out.print(root.data+"-"); preOrder(root.left); preOrder(root.right); } }
//中序遍历 public static void inOrder(NodeTreeDemo root){ if(root!=null){ inOrder(root.left); System.out.print(root.data+"-"); inOrder(root.right); } }
//后序遍历 public static void postOrder(NodeTreeDemo root){ if(root!=null){ postOrder(root.left); postOrder(root.right); System.out.print(root.data+"-"); } }