數據結構Java版之二叉查找樹(七)

二叉查找樹(BST : BInary Search Tree)this

二叉查找樹的性質:spa

  1.每個元素有一個鍵值code

  2.左子樹的鍵值都小於根節點的鍵值blog

  3.右子樹的鍵值都大於根節點的鍵值遞歸

  4.左右子樹都是二叉查找樹class

二叉查找樹查找一個數據的速度很是快,在龐大的數據中,左右來回較少的次數就能找到。下面來作一個二叉查找樹。數據

 

1.建立一個節點類:di

    // 樹節點
    class TreeNode {
        public char val;
        public TreeNode left;
        public TreeNode right;
        public TreeNode(char x) {
            val = x;
        }
    }

2.完整代碼:while

package tree;

public class BinaryFindTree {
    private TreeNode root;
    public BinaryFindTree(TreeNode root) {
        this.root = root;
    }
    //插入節點
    public boolean Insert(TreeNode x) {
         TreeNode p = root;
         TreeNode q = null;
         //查找插入的位置
         while(p != null) {
             q = p;
             if(x.val == p.val) {return false;}
             if(x.val < p.val) {p = p.left;}
             else {p = p.right;}
         }
         //找到的位置就是q
         if(root == null) root = x;
         else if (x.val < q.val) q.left = x;
         else q.right = x;
         return true; 
    }
   //遞歸查找
    public TreeNode Search(TreeNode x) {
        return Search(root, x);
    }
    public TreeNode Search(TreeNode b, TreeNode x) {
        if(b == null) return null;
        if(x.val == b.val) return b;
        if(x.val < b.val) return Search(b.left, x);
        return Search(b.right, x);
    }
    //迭代查找
    public TreeNode IterSearch(TreeNode x) {
        TreeNode t = root;
        while(t != null) {
            if(t.val == x.val) return t;
            if(x.val < t.val) t = t.left;
            else t = t.right;
        }
        return null;
    }
    // 樹節點
    class TreeNode {
        public char val;
        public TreeNode left;
        public TreeNode right;
        public TreeNode(char x) {
            val = x;
        }
    }
}
相關文章
相關標籤/搜索