python
前序遍历 入栈顺序中右左
// A code block
var foo = 'bar';
class Solution:
def preorderTraversal(self,root:TreeNode)->List[int]:
if not root:
return []
stack = [root]
result = []
while stack:
node = stack.pop()
result.append(node.val)
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
return result
后序遍历 入栈顺序 中左右
// A code block
var foo = 'bar';
class Solution:
def preorderTraversal(self,root:TreeNode)->List[int]:
if not 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]
中序遍历 入栈顺序 左右
class Solution:
def preorderTraversal(self,root:TreeNode)->List[int]:
if not root:
return []
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
层序遍历 一层一层打印
利用长度法
class Solution:
def levelOrder(self,root:Optional[TreeNode])->List[List[int]]:
if not root:
return[]
queue = collections.deque([root])
result=[]
while queue:
level =[]
for_in range(len(queue)):
cur=queue.popleft()
level.append(cur.val)
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
result.append(level)
return result
递归法
class Solution:
def levelOrder(self,root:Optional[TreeNode])->List[List[int]]:
levels=[]
self.helper(root,0,levels)
return levels
def helper(self,node,level,levels):
if not node:
return
if len(levels) == level:
levels.append([])
levels[level].append(node.val)
self.helper(node.left,level+1,levels)
self.helper(node.right,level+1,levels)
统一迭代法
前序遍历
class Solution:
def preorderTraversal(self,root:TreeNode)->List[int]:
result=[]
st=[]
if root:
st.append(root)
while st:
node=st.pop()
if node!=None:
if node.right: #右
st.append(node.right)
if node.left: #左
st.append(node.left)
st.append(node) #中
st.append(None)
else:
node=st.pop()
result.append(node.val)
return result
后序遍历:
class Solution:
def postorderTraversal(self,root:TreeNode)->List[int]:
result=[]
st=[]
if root:
st.append(root)
while st:
node=st.pop()
if node!=None:
st.append(node) #中
st.append(None)
if node.right: #右
st.append(node.right)
if node.left: #左
st.append(node.left)
else:
node=st.pop()
result.append(node.val)
return result
中序遍历
class Solution:
def inorderTraversal(self,root:TreeNode)->List[int]:
result=[]
st=[]
if root:
st.append(root)
while st:
node=st.pop()
if node!=None:
if node.right: #右
st.append(node.right)
st.append(node) #中
st.append(None)
if node.left: #左
st.append(node.left)
else:
node=st.pop()
result.append(node.val)
return result
文章介绍了使用Python通过栈和队列实现二叉树的前序、后序、中序和层序遍历,包括递归和非递归两种方法。在遍历过程中,详细阐述了节点的入栈顺序以达到正确的遍历效果。
658

被折叠的 条评论
为什么被折叠?



