java数据结构:二叉树
树:树形结构的特点是一个节点可有多个直接后继,是一种常用的非线性结构。
二叉树:结合了有序数组和链表的优点,在树中查找数据和在有序数组中查找一样快,增删数据和在链表中一样快。
插入操作时,二叉树从根节点开始,比父节点大的往左边插入,比父节点小的往右边插入
下面是链表实现二叉树:
Node.java
package BTree; /** * 链表二叉树的节点类 */ public class Node { int data; Node leftChild; Node rightChild; //初始化根节点 public Node(){ data = 0; leftChild = null; rightChild = null; } //初始化节点 public Node(int data){ this.data = data; leftChild = null; rightChild = null; } }
LinkOfBTree.java
package BTree; /** * @author * 链表实现二叉树 * 三种遍历方式:先根遍历,中根遍历,后根遍历 */ public class LinkOfBTree { Node root = null; //初始化二叉树 public LinkOfBTree(int data){ root = new Node(data); } //新增节点 public void add(int data){ Node node = new Node(data); Node temp = root; while(true){ if(temp.data >= data){ if(temp.leftChild != null) temp = temp.leftChild; else { temp.leftChild = node; break; } }else{ if(temp.rightChild != null) temp = temp.rightChild; else{ temp.rightChild = node; break; } } } } /**打印二叉树:递归 *node:初始数据为根节点* *先根遍历 */ public void displayRootFirst(Node node){ System.out.println("节点值:"+node.data); if(node.leftChild != null) displayRootFirst(node.leftChild); if(node.rightChild != null) displayRootFirst(node.rightChild); } /** * 中根遍历二叉树 */ public void displayRootMid(Node node){ if(node.leftChild != null) displayRootMid(node.leftChild); System.out.println("节点值:"+node.data); if(node.rightChild != null) displayRootMid(node.rightChild); } /** * 后根遍历二叉树 */ public void displayRootLast(Node node){ if(node.leftChild != null) displayRootLast(node.leftChild); if(node.rightChild != null) displayRootLast(node.rightChild); System.out.println("节点值:"+node.data); } public static void main(String[] a){ LinkOfBTree tree = new LinkOfBTree(10); tree.add(8); tree.add(7); tree.add(3); tree.add(11); tree.add(3); tree.add(20); tree.add(26); tree.add(11); System.out.println("------先根遍历------"); tree.displayRootFirst(tree.root); System.out.println("------中根遍历------"); tree.displayRootMid(tree.root); System.out.println("------后根遍历------"); tree.displayRootLast(tree.root); } }