第十天 leetcode算法二叉树专项突破 5道题让你彻底搞懂二叉树

关于作者:

大家好,我是Leetcode 2020--2022,连续3年金牌获得者,和亚洲区域赛铜牌获得者,

先后在字节和大疆从事技术研发,现在是阿里达摩院的扫地僧,面试专家,CSDN博客专家。

对算法一定的见解,是一个刷题10年的算法爱好者 ,利用工作之余刷leetcode。成为leetcode官方答案贡献者之一。


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)

Leetcode / 力扣

前序遍历为 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)

Leetcode / 力扣

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)

你可能感兴趣的:(第十天 leetcode算法二叉树专项突破 5道题让你彻底搞懂二叉树)