二叉树:
满二叉树:除叶子结点,每个节点都满。
完全二叉树:叶子节点可以不满,但是一定保证从左到右的顺序存在,中间不能空。
二叉搜索树:
有数值,左小右大
平衡二叉搜索树:
左右子树高度差绝对值不大于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
终止条件:当前遍历的节点为空
确定单层逻辑
标签:遍历,TreeNode,val,List,代码,随想录,Day14,二叉树,root From: https://www.cnblogs.com/dwj-ngu/p/16849241.html