代码随想录Day14
二叉树:
满二叉树:除叶子结点,每个节点都满。
完全二叉树:叶子节点可以不满,但是一定保证从左到右的顺序存在,中间不能空。
二叉搜索树:
有数值,左小右大
平衡二叉搜索树:
左右子树高度差绝对值不大于1,切左右子树都为平衡二叉树
存储方式:
链式存储:链表,通过左右指针进行链接,
顺序存储:数组,前序遍历,如果父节点是i,左孩子是2i+1,右孩子是2i+2
前序遍历:中左右
中序遍历:左中右
后序遍历:左右中
二叉树的定义:
public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left; this.right = right; } }
LeetCode144 145 94
递归遍历,前中后序
1.确定递归函数的参数和返回值
2. 确定终止条件
3.确定单层递归逻辑
// 前序遍历·递归·LC144_二叉树的前序遍历 class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<Integer>(); preorder(root, result); return result; } public void preorder(TreeNode root, List<Integer> result) { if (root == null) { return; } result.add(root.val); preorder(root.left, result); preorder(root.right, result); } } // 中序遍历·递归·LC94_二叉树的中序遍历 class Solution { public List<Integer> inorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>(); inorder(root, res); return res; } void inorder(TreeNode root, List<Integer> list) { if (root == null) { return; } inorder(root.left, list); list.add(root.val); // 注意这一句 inorder(root.right, list); } } // 后序遍历·递归·LC145_二叉树的后序遍历 class Solution { public List<Integer> postorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<>(); postorder(root, res); return res; } void postorder(TreeNode root, List<Integer> list) { if (root == null) { return; } postorder(root.left, list); postorder(root.right, list); list.add(root.val); // 注意这一句 } }
参数:根节点+数组(存遍历结果) 返回值一般都是void
终止条件:当前遍历的节点为空
确定单层逻辑
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~