# 前序遍历-迭代-LC144_二叉树的前序遍历 classSolution: defpreorderTraversal(self, root) : # 根结点为空则返回空列表 ifnot root: return [] stack=[root] result=[] while stack: node=stack.pop() result.append(node.value) if root.right: stack.append(root.right) if root.left: stack.append(root.left) return result
# 中序遍历-迭代-LC94_二叉树的中序遍历 classSolution: definorderTraversal(self, root) : ifnot root: return [] stack = [] # 不能提前将root结点加入stack中 result = [] cur = root while cur or stack: # 先迭代访问最底层的左子树结点 if cur: stack.append(cur) cur = cur.left # 到达最左结点后处理栈顶结点 else: cur = stack.pop() result.append(cur.val) # 取栈顶元素右结点 cur = cur.right return result
# 后序遍历-迭代-LC145_二叉树的后序遍历 classSolution: defpostorderTraversal(self, root): ifnot root: return [] stack = [root] result = [] while stack: node = stack.pop() # 中结点先处理 result.append(node.val) # 左孩子先入栈 if node.left: stack.append(node.left) # 右孩子后入栈 if node.right: stack.append(node.right) # 将最终的数组翻转 return result[::-1]
while que: size = len(que) result = [] for _ inrange(size): cur = que.popleft() result.append(cur.value) if cur.left: que.append(cur.left) if cur.right: que.append(cur.right) results.append(result)
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right classSolution: """二叉树层序遍历迭代解法""" deflevelOrderBottom(self,root): results = [] ifnot root: return results
from collections import deque que = deque([root])
while que: size = len(que) result = [] for _ inrange(size): cur = que.popleft() result.append(cur.val) if cur.left: que.append(cur.left) if cur.right: que.append(cur.right) results.append(result)
defrightSideView(root): ifnot root: return [] result=[] from collections import deque que=deque([root]) while que: size=len(que) for _ inrange(size): cur=que.popleft() if _==size-1: result.append(cur.value) if cur.left: que.append(cur.left) if cur.right: que.append(cur.right) return result
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。
示例 1:
1 2 3
输入:root = [1,2,3,4,5,6,7] 输出:[1,#,2,3,#,4,5,6,7,#] 解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化的输出按层序遍历排列,同一层节点由 next 指针连接,'#' 标志着每一层的结束。
from collections import deque que = deque([root]) while que: size = len(que) for _ inrange(size): cur = que.popleft() if cur.left: que.append(cur.left) if cur.right: que.append(cur.right) if _ ==size -1: break cur.next=que[0] return root
from collections import deque que = deque([root]) while que: size = len(que) for _ inrange(size): cur = que.popleft() if cur.left: que.append(cur.left) if cur.right: que.append(cur.right) if _ ==size -1: break cur.next=que[0] return root
from collections import deque que=deque([root]) depth=0 while que: depth+=1 size=len(que) for _ inrange(size): cur=que.popleft() if cur.left: que.append(cur.left) if cur.right: que.append(cur.right) return depth
defcompare(self, left, right): # 首先排除空节点的情况 if left == Noneand right != None: returnFalse elif left != Noneand right == None: returnFalse elif left == Noneand right == None: returnTrue
# Definition for a binary tree node. classTreeNode: def__init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right classSolution: defisValidBST(self, root): #中序遍历 stack=[] pre=None cur=root while cur or stack: if cur: stack.append(cur) cur=cur.left else: cur=stack.pop() if pre and cur.val<=pre.val: returnFalse pre=cur cur=cur.right returnTrue
530.二叉搜索树的最小绝对差
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。
示例 1:
1 2
输入:root = [4,2,6,1,3] 输出:1
示例 2:
1 2
输入:root = [1,0,48,null,null,12,49] 输出:1
思路:
二叉搜索树 通过中序遍历获得遍历数组
比较遍历数组的相邻的两数的绝对值之差 取最小值
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
classSolution: defgetMinimumDifference(self,root): result=[] record=[] self.zhongxu(root,result) for i inrange(len(result)-1): record.append(abs(result[i+1]-result[i])) returnmin(record)
classSolution: deffindMode(self,root): result = [] self.zhongxu(root, result) record = {} for i in result: if i in record: record[i] += 1 else: record[i] = 1 tuplelist = [(val, key) for key, val in record.items()] tuplelist_sorted = sorted(tuplelist, reverse=True) target = tuplelist_sorted[0][0] res = [] for j in tuplelist_sorted: if j[0] == target: res.append(j[1]) else: break return res defzhongxu(self,root, result): ifnot root: returnNone self.zhongxu(root.left, result) result.append(root.val) self.zhongxu(root.right, result)
701.二叉搜索树中的插入操作
给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。