1.递归(补充)
(1)什么是递归?
方法(函数)调用其自身的过程。
(2)如何使用递归?
step1. 将大的问题拆分成类似的小的问题。
step2. 找到小的问题的答案。
(3)案例:计算一个数的阶乘


2.二叉树
(1)树的相关知识

(2)排序二叉树(查找二叉树)

2) 二叉树的遍历
a.先序遍历(了解): 先访问根节点,然后先序遍历左子树,最后先序遍历右子树
b.中序遍历(重点):先中序遍历左子树,然后访问根节点,最后中序遍历右子树。
c.后序遍历(了解):先后序遍历左子树,然后后序遍历右子树,最后访问根节点。

3)排序二叉树的实现


代码实现
package tree;
/**
*排序二叉树类
* 二叉树不允许有重复的数据
*/
public class Tree<E extends Comparable<E>> {
//用于存放根节点的引用
private Node root;
/**
* Node类用于描述二叉树当中的某个节点
* 其中,data用于存放数据(即元素),left和
* right用于存放其左右子树的引用
*/
class Node{
E data;
Node left;
Node right;
Node(E e) {data = e;}
//将e添加到当前节点下面
public boolean append(E e){
/*
要添加的元素跟当前节点中存放的元素相等,
则不用添加了(排序二叉树不允许有重复的数据)
*/
if (data.compareTo(e)==0){ return false;}
/*
要添加的元素比当前节点中的存放的元素小,则该元素
要添加到当前节点的左边,否则添加到当前节点的右边
*/
if (data.compareTo(e)>0){
/*
添加到左边又分两种情况
1:左子树为空
2:左子树不为空
*/
if (left==null){
//如果左子树为空,则当前元素先封装成一个节点,然后作为其左子树
left = new Node(e);
return true;
}else {
//如果左子树不为空,则将该元素添加到其左子树下面(递归调用).
return left.append(e);
}
}else {
//添加到当前节点右边.
if (right==null){
right = new Node(e);
return true;
}else {
return right.append(e);
}
}
}
/**
* 对当前节点按照中序遍历的规则进行访问
* @param str
*/
public void inOrder(StringBuilder str) {
//如果左子树不为空,则中序遍历其左子树
if (left!=null){
left.inOrder(str);
}
//然后访问该节点
str.append(data+",");
//如果右子树不为空,则中序遍历其右子树
if (right!=null){
right.inOrder(str);
}
}
}
/**
* 将元素添加到二叉树里面
* @param e 要添加的元素
* @return
*/
public boolean add(E e){
//如果二叉树为空,则将该元素先封装成一个节点,然后该节点成为其根节点
if (root==null){
root = new Node(e);
}else {
//如果二叉树不为空,则将该元素添加到该元素的根节点下面
return root.append(e);
}
return true;
}
@Override
public String toString() {
if (root==null){
return "[]";
}
StringBuilder str = new StringBuilder();
root.inOrder(str);
//删除最后那一个逗号","
str.delete(str.lastIndexOf(","),str.length());
return "["+str.toString()+"]";
}
}
3万+

被折叠的 条评论
为什么被折叠?



