/**
 * Company
 * Copyright (C) 2014-2017 All Rights Reserved.
 */
package com.cwenao.trying.tree;

/**
 * 树定义
 * 结点的度：结点拥有的子树的数目。
 * 叶子：度为零的结点。
 * 分支结点：度不为零的结点。
 * 树的度：树中结点的最大的度。
 *
 * 层次：根结点的层次为1，其余结点的层次等于该结点的双亲结点的层次加1。
 * 树的高度：树中结点的最大层次。
 *
 * 二叉树性质：
 * 性质1：二叉树第i层上的结点数目最多为 2{i-1} (i≥1)。
 * 性质2：深度为k的二叉树至多有2{k}-1个结点(k≥1)。
 * 性质3：包含n个结点的二叉树的高度至少为log2 (n+1)。
 * 性质4：在任意一棵二叉树中，若终端结点的个数为n0，度为2的结点数为n2，则n0=n2+1
 *
 * @link http://www.cnblogs.com/skywang12345/p/3576328.html
 * @author cwenao
 * @version $Id BinarySearchTreeTrying.java, v 0.1 2017-10-20 08:44 cwenao Exp $$
 */
public class BinarySearchTreeTrying<T extends Comparable> {

    private BinaryNodeTrying<T> root;

    public BinarySearchTreeTrying() {
        root = null;
    }

    public BinaryNodeTrying<T> insert(T data, BinaryNodeTrying<T> node) {
        if (node == null) {
            node = new BinaryNodeTrying<T>(data);
        }

        int left = data.compareTo(node.getData());

        return node;

    }


}

@@ -962,19 +962,824 @@
     
-return node
+if (left %3C 0) %7B%0A            node = insert(data, node.getLeftNode());%0A        %7D else if (left %3E 0) %7B%0A            node = insert(data, node.getRightNode());%0A        %7D%0A%0A        return node;%0A    %7D%0A%0A    public BinaryNodeTrying%3CT%3E remove(T data, BinaryNodeTrying nodeTrying) %7B%0A        if (nodeTrying == null) %7B%0A            return null;%0A        %7D%0A%0A        int left = data.compareTo(nodeTrying.getData());%0A%0A%0A        return nodeTrying;%0A    %7D%0A%0A    /**%0A     * %E6%9F%A5%E8%AF%A2%E5%8F%B3%E5%AD%90%E6%A0%91%E5%BA%8F%E5%88%97%E4%B8%AD%E4%B8%8D%E5%AD%98%E5%9C%A8%E5%B7%A6%E5%AD%90%E6%A0%91%E7%9A%84%E8%8A%82%E7%82%B9%0A     * @param nodeTrying%0A     * @return%0A     */%0A    public BinaryNodeTrying%3CT%3E findExcludeLeftNode(BinaryNodeTrying nodeTrying) %7B%0A        if (nodeTrying == null) %7B%0A            return null;%0A        %7D%0A        if (nodeTrying.getLeftNode() == null) %7B%0A            return nodeTrying;%0A        %7D%0A%0A        return findExcludeLeftNode(nodeTrying.getRightNode())
 ;%0A%0A 

update the BSTs