(一)前言
数据结构面试常问的几种类型:递归算法、链表操作、栈操作、队列操作、二叉树、动态规划、搜索的知识点
(二)二叉树基础
参考:数据结构二叉树基础
(三)java实现二叉树
二叉树的存储结构分为:顺序存储--数组存储、链式存储--单向链表存储
1.定义二叉树节点
/**
* 树的表示:
* 1.树的双亲表示法
* 2.树的孩子表示法
* 3.树的孩子兄弟表示法--此类用到
*/
public class TreeNode {
public TreeNode left;
public TreeNode right;
public int data;
public TreeNode(int data){
this.left = null;
this.right = null;
this.data = data;
}
}
2.递归向二叉树插入节点
public void insert(TreeNode root,int data){
//插入数据大于根节点,插入根节点的右边
if (data > root.data){
//如果右子树为空,就插入
if (root.right == null){
root.right = new TreeNode(data);
}else {
//如果不为空就再创建一个节点
this.insert(root.right, data);
}
}else{
//如果左子树为空,就插入
if (root.left == null){
root.left = new TreeNode(data);
}else {
//如果不为空就再创建一个节点
this.insert(root.left, data);
}
}
}
3.前序、中序、后序遍历----时间复杂度O(n)
//1.前序遍历--(根>左>右)
public void preOrder(TreeNode root){
if (root != null){
System.out.print(root.data+">");
preOrder(root.left);
preOrder(root.right);
}
}
//2.中序遍历--(左>根>右)
public void midOrder(TreeNode root){
if (root != null){
midOrder(root.left);
System.out.print(root.data+">");
midOrder(root.right);
}
}
//3.后序遍历--(左>右>根)
public void lastOrder(TreeNode root){
if (root != null){
lastOrder(root.left);
lastOrder(root.right);
System.out.print(root.data+">");
}
}