144 : 前序遍历
94 : 中序遍历
145: 后序遍历
回溯:
22 :括号生成
78: 子集
90: 子集2
77: 组合
46: 全排列(最经典)
938: 二叉搜索树的范围
dfs和bfs
200: 岛屿数量(经典)
102: 二叉树层级遍历 bfs
107 :二叉树的层序遍历2
中等难度题目:
124:二叉树中的最大路径和 难 二叉树
104: 二叉树的最大深度 二叉树
103: 二叉树的锯齿形层序遍历 二叉树
199: 二叉树的右视图 二叉树
剑指offer题目:
32:从上到下打印二叉树
68: 二叉树的最近公共祖仙(leetcode236)
二叉树:(二叉树前序、中序、后序遍历)
https://juejin.cn/post/6844903960898174984
采用递归和非递归对二叉树进行前序遍历
二叉树的后续遍历,非递归实现
概念:
算法:判断一棵树是否是平衡二叉树镜像二叉树;
什么是完全二叉树?
算法熟悉么?给了一个二叉排序树,出了一个给定节点找到它的下一个元素(指的是大小顺序的下一个)的算法题
最值:
距离
计算二叉树的最大深度,要求非递归算法。
任意一颗二叉树,求最大节点距离
任意二叉树,求出其中最远的两个节点间的距离
路径
二叉树的最低深度路径打印
8.二叉树给出根节点和目标节点,找出从根节点到目标节点的路径
算法题:二叉树中和为某一值的路径
节点:
二叉树某一层有多少个节点
8.算法题:二叉树的每一层最左边节点算法题: 230. 二叉搜索树中第K小的元素 - 力扣(LeetCode) (leetcode-cn.com)
如果你想学好算法,建议上面二叉树的题目都刷一下。如果你只是想应付面试,主要看一下高频的面试题目即可。
最重要: 二叉树的前序遍历,中序遍历,后续遍历,记住,递归和非递归解法都要会。学会举一反三。
DFS和bfs,回溯算法和递归算法的常规题目考察
常见的 BST 算法。二叉查找树的最近公共祖先(两个元素的,三个元素的,多个元素呢)。二叉树的最近公共祖先。
最值问题包含(路径,距离,节点,k值问题)
树的递归。比如树的深度,最小深度,树的镜像。
二叉树种类
满二叉树
对于一棵二叉树,如果每一个非叶子节点都存在左右子树,并且二叉树中所有的叶子节点都在同一层中,这样的二叉树称为满二叉树。
完全二叉树
对于一棵具有n个节点的二叉树按照层次编号,同时,左右子树按照先左后右编号,如果编号为i的节点与同样深度的满二叉树中编号为i的节点在二叉树中的位置完全相同,则这棵二叉树称为完全二叉树。
平衡二叉树:
又称 AVL 树。平衡二叉树是二叉搜索树的进化版,所谓平衡二叉树指的是,左右两个子树的高度差的绝对值不超过 1。
二叉排序树:
又称二叉查找树(Binary Search Tree),亦称二叉搜索树。二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
左、右子树也分别为二叉排序树;
没有键值相等的节点
二分查找的时间复杂度是O(log(n)),最坏情况下的时间复杂度是O(n)(相当于顺序查找)
红黑树:
红黑树是每个节点都带颜色的树,节点颜色或是红色或是黑色,红黑树是一种查找树。红黑树有一个重要的性质,从根节点到叶子节点的最长的路径不多于最短的路径的长度的两倍。对于红黑树,插入,删除,查找的复杂度都是O(log N)。
1.数的基本概念题目(高度,深度,平衡,满二叉树)
树的高度
1.0 求二叉树的最大层数(最大深度)
104. Maximum Depth of Binary Tree (Easy)
平衡树
110. Balanced Binary Tree (Easy)
2. 前中后序遍历(递归实现和非递归实现)
遍历方式
二叉树主要有四种遍历方式
先序(先根)遍历:即先访问根节点,再访问左孩子和右孩子
中序遍历:先访问做孩子,再访问根节点和右孩子
后序遍历:先访问左孩子,再访问右孩子,再访问根节点
层次遍历:按照所在层数,从下往上遍历
递归
一棵树要么是空树,要么有两个指针,每个指针指向一棵树。树是一种递归结构,很多树的问题可以使用递归来处理。
前:leetcode144
中:leetcode94
后:leetcode145
二叉树的锯齿形层序遍历
非递归实现二叉树的前序遍历
145. Binary Tree Postorder Traversal (Medium)
前序遍历为 root -> left -> right,后序遍历为 left -> right -> root。可以修改前序遍历成为 root -> right -> left,那么这个顺序就和后序遍历正好相反。
publicListpostorderTraversal(TreeNode root){ List ret =newArrayList<>(); Stack stack =newStack<>(); stack.push(root);while(!stack.isEmpty()) {TreeNodenode=stack.pop();if(node ==null)continue; ret.add(node.val); stack.push(node.left); stack.push(node.right); } Collections.reverse(ret);returnret;}复制代码
非递归实现二叉树的中序遍历
94. Binary Tree Inorder Traversal (Medium)
publicListinorderTraversal(TreeNode root){ List ret =newArrayList<>();if(root ==null)returnret; Stack stack =newStack<>();TreeNodecur=root;while(cur !=null|| !stack.isEmpty()) {while(cur !=null) { stack.push(cur); cur = cur.left; }TreeNodenode=stack.pop(); ret.add(node.val); cur = node.right; }returnret;}
leetcode 32:从上到下打印二叉树
BST(二叉查找树)
二叉查找树(BST):根节点大于等于左子树所有节点,小于等于右子树所有节点。
二叉查找树中序遍历有序。
二叉树的最近公共祖先:leetcode236
最值:
距离
计算二叉树的最大深度,要求非递归算法。
任意一颗二叉树,求最大节点距离
任意二叉树,求出其中最远的两个节点间的距离
路径
二叉树的最低深度路径打印
8.二叉树给出根节点和目标节点,找出从根节点到目标节点的路径
算法题:二叉树中和为某一值的路径
节点:
二叉树某一层有多少个节点
8.算法题:二叉树的每一层最左边节点算法题: 230. 二叉搜索树中第K小的元素 - 力扣(LeetCode) (leetcode-cn.com)