leetcode 树总结

下面对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)