算法训练营Day14(二叉树)
2023-12-13 03:55:51
理论基础
这里的话,学的也不少,就是注意一下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);
}
}
日后补充(我基础不好~hh)
文章来源:https://blog.csdn.net/weixin_65728526/article/details/134946546
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!