大学里面学习过的树,现在都快忘没了。打算整理一个系列关于树的知识结构,并用java代码加以实现,这个系列会包含二叉树、平衡二叉树、B-树、B+树、红黑树。
1.二叉树的定义
参考https://zh.wikipedia.org/wiki/%E4%BA%8C%E5%8F%89%E6%A0%91(注意区别二叉树、满二叉树、完全二叉树)
2.二叉树的数据结构
@Data
public class Node {
private int val;
private Node left;
private Node right;
}
3.二叉树的基本操作
3.1 遍历:递归算法很好写,这里就不赘述,非递归实现树的先序遍历,中序遍历,后序遍历(todo),层次遍历
小感悟:树的层次遍历很重要,判断二叉树是否是completeBinaryTree、fullBinaryTree,查看树的度数,节点总数都有用到此方法。
代码实现如下:
//二叉树遍历 先序遍历
private List<Integer> proRootTraverse(Node treeNode) {
List<Integer> proRootTraverseArray = new ArrayList<>(0);
Stack<Node> stack = new Stack<>();
while (!stack.isEmpty() || treeNode != null) {
if (treeNode != null) {
proRootTraverseArray.add(treeNode.getVal());
stack.add(t