2023-12-12 树的前中后各种遍历玩法
2023-12-13 06:37:13
树的前中后各种遍历方法
前序遍历、中序遍历、后序遍历是怎么样的!头结点参考它们前,中,后就可以了!
也就是前序遍历,头节点最先遍历,后是左节点,再是有节点!
中序遍历,左叶子节点,头节点结点,再到右节点!
后序遍历,左叶子节点,右叶子节点,再到头结点
第一种递归遍历:
递归遍历三要素:
① 确定递归的参数以及返回值
② 确定终止条件
③ 确定单层递归逻辑
前序:
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
if not root:
return []
left = self.preorderTraversal(root.left)
right = self.preorderTraversal(root.right)
return [root.val] + left +right
# 中序
return left + [root.val] + right
# 后序
return left + right + [root.val]
第二种统一遍历
那我们就将访问的节点放入栈中,把要处理的节点也放入栈中但是要做标记。
如何标记呢,就是要处理的节点放入栈之后,紧接着放入一个空指针作为标记。 这种方法也可以叫做标记法。
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
result = []
stack = []
if root:
stack.append(root)
while stack:
node = stack.pop()
if not node is None:
if node.right:
stack.append(root.right)
if node.left:
stack.append(root.left)
# 下面这两行移动就上下就是中序、后序遍历了!
stack.append(node)
stack.append(None)
else:
node = stack.pop()
result.append(node.val)
return result
第三种使用栈来遍历的
前序:
中序:
后序:
再来看后序遍历,先序遍历是中左右,后续遍历是左右中,那么我们只需要调整一下先序遍历的代码顺序,就变成中右左的遍历顺序,然后在反转result数组,输出的结果顺序就是左右中了,如下图:
文章来源:https://blog.csdn.net/niuzai_/article/details/134958864
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!