输入字符序列,建立二叉树;按先序、中序、后序遍历二叉树(三种递归算法和中序遍历的非递归算法)
时间: 2024-05-15 17:17:42 浏览: 135
好的,我了解了你的问题。这是一个关于二叉树的问题,我会尽力回答你的问题,同时不会透露你的任何要求。
首先,为了建立二叉树,你需要指定一个根节点,以及左右子树。一般地,我们可以用递归算法来实现这个过程。具体来说,对于二叉树的每个节点,我们可以按照以下步骤构建它:
1. 读入当前节点的值。
2. 如果当前节点的左子树非空,递归构建它的左子树。
3. 如果当前节点的右子树非空,递归构建它的右子树。
有了二叉树之后,我们可以按照不同的遍历方式对它进行遍历。常见的遍历方式有先序遍历、中序遍历和后序遍历。下面分别介绍这三种遍历方式的递归算法。
1. 先序遍历
先序遍历的顺序是:先遍历根节点,再遍历左子树,最后遍历右子树。具体算法如下:
```python
def preorderTraversal(root):
if not root:
return
print(root.val)
preorderTraversal(root.left)
preorderTraversal(root.right)
```
2. 中序遍历
中序遍历的顺序是:先遍历左子树,再遍历根节点,最后遍历右子树。具体算法如下:
```python
def inorderTraversal(root):
if not root:
return
inorderTraversal(root.left)
print(root.val)
inorderTraversal(root.right)
```
3. 后序遍历
后序遍历的顺序是:先遍历左子树,再遍历右子树,最后遍历根节点。具体算法如下:
```python
def postorderTraversal(root):
if not root:
return
postorderTraversal(root.left)
postorderTraversal(root.right)
print(root.val)
```
此外,中序遍历还有一种非递归的实现方式,就是通过一个栈来模拟遍历的过程。具体算法如下:
```python
def inorderTraversal(root):
stack = []
cur = root
while cur or stack:
if cur:
stack.append(cur)
cur = cur.left
else:
cur = stack.pop()
print(cur.val)
cur = cur.right
```
以上就是关于输入字符序列建立二叉树,并按不同方式遍历二叉树的算法。希望能够对你有所帮助!
阅读全文