LeetCode(98)验证二叉搜索树(102,107)层次遍历
(98)验证二叉搜索树
二叉树的三种访问方式
1.先序遍历:按照根节点->左子树->右子树的顺序访问二叉树
先序遍历结果:A BDFE CGHI
思维过程:
(1)先访问根节点A,
(2)A分为左右两个子树,因为是递归调用,所以左子树也遵循“先根节点-再左-再右”的顺序,所以访问B节点,
(3)然后访问D节点,
(4)访问F节点的时候有分支,同样遵循“先根节点-再左–再右”的顺序,
(5)访问E节点,此时左边的大的子树已经访问完毕,
(6)然后遵循最后访问右子树的顺序,访问右边大的子树,右边大子树同样先访问根节点C,
(7)访问左子树G,
(8)因为G的左子树没有,所以接下俩访问G的右子树H,
(9)最后访问C的右子树I
2.中序遍历:按照左子树->根节点->右子树的顺序访问
中序遍历结果:DBEF A GHCI
3.后序遍历
后序遍历的结果:DEFB HGIC A
这道题我们可以使用中序遍历为升序对的解法,先把节点中序排列(左-根-右),再对数组进行遍历,同时判断相邻元素间大小,如果排前面的数大于等于之后的数,说明不是二叉搜索树。
class Solution: def isValidBST(self, root): """ :type root: TreeNode :rtype: bool """ self.last_node = float("-inf") return self.helper(root) def helper(self, root): if not root: return True left = self.helper(root.left) if root.val <= self.last_node: return False self.last_node = root.val right = self.helper(root.right) return left and right
(102)二叉树的层次遍历
思路:二叉树或一般树的水平层次遍历,可以使用BFS(广度搜素)算法,使用队列Queue标记每一层的结点元素;
Queue:先进先出, 后进后出。可以保证每一层遍历时的结点顺序;
BFS:类似于电影中的病毒传染,先感染靠近自己的,再由易感染层感染更外层…(我理解的就是这么个理);
该题二叉树中,先把根结点压入队列,当队列不为空时,移除队首结点,并判断该结点的左右子树中有无非空结点,若存在,则再次入队对应的左右子树结点……同一层的每个结点循环以上操作,直至队列为空,循环结束。
class Solution: def levelOrder(self, root): """ :type root: TreeNode :rtype: List[List[int]] """ ret = list() if root == None: return ret from queue import Queue q = Queue() q.put((root, 0)) while not q.empty(): node, level = q.get() if level == len(ret): ret.append([]) ret[level].append(node.val) if node.left != None: q.put((node.left, level + 1)) if node.right != None: q.put((node.right, level + 1)) return ret
(107)二叉树的层次遍历 II
思路与前一题雷同,就不在赘述。
class Solution: def levelOrderBottom(self, root): """ :type root: TreeNode :rtype: List[List[int]] """ q, result = [root], [] while any(q): tmp = list() len_q = len(q) for _ in range(len_q): node = q.pop(0) tmp.append(node.val) if node.left: q.append(node.left) if node.right: q.append(node.right) result.insert(0, tmp) return result
- 编程集训第4天:LeetCode验证二叉搜索树(98)及二叉树层次遍历(102,107)
- LeetCode: 102_Binary Tree Level Order Traversal | 二叉树自顶向下的层次遍历 | Easy
- LeetCode-107.二叉树的层次遍历II(相关话题:广度优先/栈)
- Leetcode 107 Binary Tree Level Order Traversal II 二叉树层次遍历与倒转
- LeetCode: 107_Binary Tree Level Order Traversal II | 二叉树自底向上的层次遍历 | Easy
- 98.验证二叉搜索树Leetcode
- leetcode102 Binary Tree Level Order Traversal(二叉树的层次遍历)
- 102.LeetCode Binary Tree Level Order Traversal(easy)[二叉树层次遍历 广度搜索 队列]
- LeetCode 98 验证二叉搜索树 Python
- [LeetCode107]Binary Tree Level Order Traversal II 二叉树层次遍历
- LeetCode 102 Binary Tree Level Order Traversal(二叉树的层次遍历)
- LeetCode-102.二叉树的层次遍历(相关话题:广度优先/栈)
- 102. 二叉树的层次遍历 leetcode
- [Leetcode] 102. 二叉树的层次遍历 java
- [leetcode-二叉树层次遍历并统计每层节点数]--102. Binary Tree Level Order Traversal
- 每日一恋 - LeetCode 102 & 107. 二叉树的层次遍历
- leetcode 530. Minimum Absolute Difference in 二叉搜索树的中序遍历 + 深度优先遍历DFS
- [Leetcode] Binary tree Zigzag level order traversal二叉树Z形层次遍历
- 第十一周项目1-验证算法(1)层次遍历算法的验证
- 【第11周 项目1 - 二叉树算法验证(1)层次遍历算法的验证】