leetcode 树总结
来源:互联网 发布:qq for mac远程协助 编辑:程序博客网 时间:2024/06/03 07:55
下面对leetcode中tree类下面的一些题目进行了总结,其中包括top 100 liked qusetions和top interviewquestions.
1. 二叉树的基本操作
find,insert(递归、非递归方法), create, delete.
删除的节点带有左右孩子,可以用直接前驱(被删除节点最右分支的节点)或是直接后继(被删除节点最左分支的节点)代替被删除节点。
2. 二叉树的遍历
2.1 前序、中序、后序:递归非递归
前序题目:
617. Merge Two Binary Trees
669. Trim a Binary Search Tree
226. Invert Binary Tree,
100. Same Tree
653. Two Sum IV - Input is a BST(前序+查找),
606. Construct String from Binary Tree
108. Convert Sorted Array to Binary SearchTree 利用升序排序的数组创建平衡二叉树。
572. Subtree of Another Tree
113. Path Sum II 要求从根节点到叶子节点作为路径,求取和为给定值的所有路径。
437. Path Sum III 不要求从根节点到叶子节点作为路径,求取和为给定值的路径数量。
101. Symmetric Tree 判断二叉树是否是对称的,利用两个root分别先序遍历
144. Binary Tree Preorder Traversal
236. Lowest Common Ancestor of a BinaryTree 寻找最近公共祖先,利用前序遍历找到从root分别到达两个节点的路径,再根据这两个路径找到最近公共节点。
103. Binary Tree Zigzag Level OrderTraversal 之字形遍历二叉树,利用两个栈(再看看)
114. Flatten Binary Tree to Linked List 二叉树转换为单链表(难,再看看)
中序题目:
501. Find Mode in Binary Search Tree,
94. Binary Tree Inorder Traversal,
230. Kth Smallest Element in a BST
98. Validate Binary Search Tree 判断是否是二叉搜索树(先序遍历或用中序遍历)
只判断一个节点的左右子节点,左节点只小于父节点,右节点只大于父节点是远远不够的。还需要左节点要大于父节点的上限,右节点要小于父节点上限。
所以,假设我们已经知道了当前节点的区间,那么左子节点的上限即为父节点的值,而下限则应该为父节点的下限。同理,右子节点的下限是父节点的值,而上限也就是父节点的上限。
最初边界要用long,[LONG_MIN, LONG_MAX].
后序题目:
104. Maximum Depth of Binary Tree
111. Minimum Depth of Binary Tree
563. Binary Tree Tilt
543. Diameter of Binary Tree
124. Binary Tree Maximum Path Sum(难)不要求穿过root,可以孩子和他们的父节点相连接的路径。(再看看)
145. Binary Tree Postorder Traversal
其他二叉树题目:
538. Convert BST to Greater Tree利用右子树,根,左子树方式遍历
96. Unique Binary Search Trees卡塔兰数求解一个中序序列能够组成多少种二叉搜索树。
2.2层次遍历
层次:都比较简单
637. Average of Levels in Binary Tree,
404. Sum of Left Leaves,
671. Second Minimum Node In a Binary Tree,
107. Binary Tree Level Order Traversal II
199. Binary Tree Right Side View
102. Binary Tree Level Order Traversal
116. Populating Next Right Pointers in EachNode
2.3 前序+中序-->创建二叉树
105. ConstructBinary Tree from Preorder and Inorder Traversal
2.4 中序+后序-->创建二叉树
106. ConstructBinary Tree from Inorder and Postorder Traversal
注:前序和后序不能唯一确定一棵树(除了只有一个节点的树),eg.前序AB,后序BA。
树 A 或 A
/ \
B B
3. huffman编码:无损编码
字符出现的频率越高,编码越短。
编码不唯一原因:(1)对每个节点编码可以左1右0或是左0右1 (2)有出现频率相同的字符,会导致构建的树有所差异。
因为任何一个字符都不是另一个字符的前缀码,所以解码时不用分隔符。
huffman树的字符都在叶子上。
代码是用数组存放树。
4. 二叉搜索树、平衡二叉树
解决二叉搜索树退化为链表的情况。
左左、右右-->单旋转
左右、右左-->双旋转
find(O(logN))、insert(插入节点后要调整)、delete(删除节点后要调整),要维护到root的平衡。
5. 2-3-4树、B树、B+树
(应用于数据库搜索,而不是用hash ???)
B树来源于2-3-4树。
黑--原有的边--孩子可能是红的
红--新边------孩子一定是黑的
root--->leaf 黑的路径长度相同。
- leetcode 树总结
- [LeetCode]二叉树题目总结
- leetCode|二叉树题目总结
- LeetCode总结
- leetcode 总结
- LeetCode总结
- LeetCode总结
- leetcode总结
- LeetCode总结
- LeetCode总结
- leetcode 总结
- LeetCode总结
- leetcode总结
- LeetCode总结
- LeetCode总结
- LeetCode总结
- LeetCode总结
- LeetCode总结
- Implement strStr()
- 理解RxJava(二)操作符流程原理分析
- 2017-12-03 Xilinx U471-IOB文档学习&总结(1):
- 团体程序设计天梯赛-练习集 L1-032. Left-pad
- VoLTE学习笔记(1)
- leetcode 树总结
- 数据结构-图-最短路径(2)弗洛伊德算法构造
- 表单脚本
- 1055. The World's Richest (25)
- git
- POJ2196 HDU1197 ZOJ2405 Specialized Four-Digit Numbers【进制+水题】
- Centos7.x 更改网卡名称eth0
- tornado异步
- 编译链接