二叉树的遍历递归法和环线法

阅读: 评论:0

2024年2月7日发(作者:)

二叉树的遍历递归法和环线法

二叉树的遍历递归法和环线法

二叉树的遍历有三种常见的方式:前序遍历、中序遍历和后序遍历。下面分别介绍二叉树的遍历的递归法和非递归法(环线法)。

1. 前序遍历:

- 递归法:先访问根节点,然后递归地访问左子树,最后递归地访问右子树。

```python

def preorderTraversal(root):

if not root:

return []

return [] + preorderTraversal() +

preorderTraversal()

```

- 环线法:使用一个栈,先将根节点入栈,然后弹出栈顶元素并访问,接着先将右子节点入栈,再将左子节点入栈。重复这个过程直到栈为空。

```python

def preorderTraversal(root):

if not root:

return []

stack = [root]

res = []

while stack:

node = ()

()

if :

()

if :

()

return res

```

2. 中序遍历:

- 递归法:先递归地访问左子树,然后访问根节点,最后递归地访问右子树。

```python

def inorderTraversal(root):

if not root:

return []

return inorderTraversal() + [] +

inorderTraversal()

```

- 环线法:使用一个栈,将当前节点及其所有左子节点依次入栈。当栈不为空时,弹出栈顶元素并访问,然后将当前节点指向弹出节点的右子节点,之后继续将当前节点及其所有左子节点入栈。

```python

def inorderTraversal(root):

if not root:

return []

stack = []

res = []

node = root

while node or stack:

while node:

(node)

node =

node = ()

()

node =

return res

```

3. 后序遍历:

- 递归法:先递归地访问左子树,然后递归地访问右子树,最后访问根节点。

```python

def postorderTraversal(root):

if not root:

return []

return postorderTraversal() +

postorderTraversal() + []

```

- 环线法:使用一个栈,将根节点入栈。然后定义一个变量prev,用于记录上一次访问的节点。重复以下步骤,直到栈为空:

- 取出栈顶元素,如果栈顶元素的右子节点为空或者已经访问过,则访问该节点,并将其赋给prev变量。否则,将栈顶元素的右子节点和自身依次入栈。

```python

def postorderTraversal(root):

if not root:

return []

stack = [root]

res = []

prev = None

while stack:

node = stack[-1]

if (not and not ) or (prev and (prev ==

or prev == )):

()

prev = ()

else:

if :

()

if :

()

return res

```

希望对你有所帮助!

二叉树的遍历递归法和环线法

本文发布于:2024-02-07 15:55:17,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170729251765368.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:遍历   访问   节点   递归   右子   元素   栈顶   环线法
留言与评论(共有 0 条评论)
   
验证码:
排行榜

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23