1. 程式人生 > >【20180422】java--二叉樹結構&演算法學習

【20180422】java--二叉樹結構&演算法學習

樹--二叉樹--二叉排序樹BST

二叉樹的java實現:

public class BinaryTreeNode {
    /*
     * 一個二叉樹包括 資料、左右孩子 三部分
     */
    private int mData;
    private BinaryTreeNode mLeftChild;
    private BinaryTreeNode mRightChild;

    public BinaryTreeNode(int data, BinaryTreeNode leftChild, BinaryTreeNode rightChild) {
        mData = data;
        mLeftChild = leftChild;
        mRightChild = rightChild;

    }

有節點後接下來開始構造一個二叉樹,二叉樹的主要方法有:

建立
新增元素
刪除元素
清空
遍歷
獲得樹的高度
獲得樹的節點數
返回某個節點的父親節點

1.二叉樹的建立
建立一個二叉樹很簡單,只需要有一個 二叉根節點,然後提供設定根節點的方法即可:
public class BinaryTree {
    private BinaryTreeNode mRoot;   //根節點
    public BinaryTree() {
    }
    public BinaryTree(BinaryTreeNode root) {
        mRoot = root;
    }
    public BinaryTreeNode getRoot() {
        return mRoot;
    }
    public void setRoot(BinaryTreeNode root) {
        mRoot = root;
    }
}       

2.新增元素

private BinaryTreeNode searchAndInsert(BinaryTreeNode parent, BinaryTreeNode node, int data) {
    if (node == null) {  //當前比較節點為 空,說明之前沒有這個資料,直接新建、插入
        node = new BinaryTreeNode();
        node.setData(data);
        if (parent != null) {    //父節點不為空,繫結關係
            if (data < parent.getData()) {
                parent.setLeftChild(node);
            } else {
                parent.setRightChild(node);
            }
        }
        return node;
    }
    //對比的節點不為空
    if (node.getData() == data) {    //已經有了,不用插入了
        return node;
    } else if (data < node.getData()) {   //比節點小,從左子樹裡查詢、插入
        return searchAndInsert(node, node.getLeftChild(), data);
    } else {
        return searchAndInsert(node, node.getRightChild(), data);
    }

}

3.遍歷二叉樹

前序中序後序遍歷,遞迴或非遞迴:https://blog.csdn.net/fengrunche/article/details/52305748

非遞迴的遍歷需要藉助一個或多個棧來輔助。


題目集合:https://www.jianshu.com/p/0190985635eb