【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