这里的话,学的也不少,就是注意一下java中容器的支持吧,hashMap这里,jdk8以后是hash表
数组+链表转红黑树的方式,这里的话采用的红黑树是完全二叉树的一种
另外优先级队列PriorityQueue是一个二叉堆,也是完全二叉树的一种。
二叉树的遍历方式:广度优先:层序遍历
深度优先:前中后
另外还有递归遍历和非递归遍历(叫做 迭代法)【因为递归的本质也是栈】
TreeMap这里好就是单纯的二叉树,红黑树,不涉及哈希表
可以看下这篇文章
递归需要注意的地方:
1、参数和返回值
? ? ? ? 可动态调整~
? ? ? ? 二叉树一般是(根节点,数组)
2、结束条件
? ? ? ? 二叉树终止条件是指针为null的时候
3、确认递归的逻辑
? ? ? ? 处理的逻辑就是,往数组放元素。
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
preorder(root,res);
return res;
}
private void preorder(TreeNode root,List<Integer> result){
if(root==null){
return;
}
result.add(root.val);
preorder(root.left,result);
preorder(root.right,result);
}
}
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
inorder(root,res);
return res;
}
private void inorder(TreeNode root,List<Integer> result){
if(root==null){
return;
}
inorder(root.left,result);
result.add(root.val);
inorder(root.right,result);
}
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
preorder(root,res);
return res;
}
private void preorder(TreeNode root,List<Integer> result){
if(root==null){
return;
}
preorder(root.left,result);
preorder(root.right,result);
result.add(root.val);
}
}