0 课程地址
https://coding.imooc.com/lesson/207.html#mid=13459
1 重点关注
1.1 二叉树的深度遍历
深度遍历包含前序遍历,中序遍历和后续遍历,与之对应的是广度遍历,见6-10
1.2 什么是前序遍历
遍历,就是把二叉树所有节点遍历一遍,前序遍历,就是先遍历节点,再遍历左节点,再遍历右节点。
2 课程内容
3 Coding
3.1 前序遍历
- 关键代码
System.out.println(node.e);//1 preOrder(node.left); preOrder(node.right);
- 全量代码
package com.company;
public class BST2<E extends Comparable> {
//1 内部类
private class Node{
//二叉树特有属性
private Node left,right;
private E e;
private Node(E e){
this.e = e;
this.left = null;
this.right = null;
}
}
private int size;
private Node root;
public BST2(){
this.size = 0;
this.root = null;
}
/**
* 定义基本方法 getSize
* @author weidoudou
* @date 2022/11/3 12:57
* @return int
**/
public int getSize(){
return size;
}
/**
*查询是否为空
* @author weidoudou
* @date 2022/11/3 12:58
* @return boolean
**/
public boolean isEmpty(){
return size == 0;
}
//2 循环添加元素,把null也看作节点
public void add(E e){
root = add(e,root);
}
//3 递归,添加元素
public Node add(E e,Node root){
//3.1 终止条件
if(root==null){
size++;
return new Node(e);
}
//3.2 递归
//3.2.1 递归左孩子
if(e.compareTo(root.e)<0){
root.left = add(e,root.left);
}
//3.2.2 递归右孩子
if(e.compareTo(root.e)>0){
root.right = add(e,root.right);
}
//点睛之笔
return root;
}
/**
* 二分搜索树 是否包含元素e
* @author weidoudou
* @date 2022/11/4 9:55
* @param e 请添加参数描述
* @return boolean
**/
public boolean contains(E e){
return contains(e,root);
}
/**
* 二分搜索树查询 递归
* @author weidoudou
* @date 2022/11/4 9:57
* @param e 请添加参数描述
* @param node 请添加参数描述
* @return boolean
**/
private boolean contains(E e,Node node){
//终止条件
if(node == null){
return false;
}
if(e.compareTo(node.e)==0){
return true;
}
//递归条件
if(e.compareTo(node.e)<0){
return contains(e,node.left);
}else{
return contains(e,node.right);
}
}
}
- 测试类:
public class Main { public static void main(String[] args) { BST2<Integer> bst2 = new BST2<>(); int [] nums = {5,3,6,8,4,2}; for(int i = 0;i<nums.length;i++){ bst2.add(nums[i]); } System.out.println(bst2.preOrder()); System.out.println(bst2); }
- 测试结果:
5 3 2 4 6 8 false 5 ==3 ====2 ======null ======null ====4 ======null ======null ==6 ====null ====8 ======null ======null Process finished with exit code 0
3.2 二叉树深度打印
/**
* 基于前序遍历完成toString打印
* @author weidoudou
* @date 2022/11/5 15:20
* @return java.lang.String
**/
@Override
public String toString() {
final StringBuffer sb = new StringBuffer();
generate(root,0);
return sb.toString();
}
private void generate(Node node, int depth){
generate(depth);
//1 终止条件
if(node==null){
System.out.println("null");
return;
}
//2 递归条件
System.out.println(node.e);
depth++;
generate(node.left,depth);
generate(node.right,depth);
}
private void generate(int depth){
for(int i = 0;i<depth;i++){
System.out.print("==");
}
}
诸葛