树--二叉树--二叉排序树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