用代码非递归创建二叉树,并且实现非递归先序遍历和非递归中序遍历
时间: 2024-05-16 11:17:22 浏览: 80
下面是用 Python 语言实现的非递归创建二叉树和非递归遍历的代码示例:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def createTree(nums):
if not nums:
return None
root = TreeNode(nums[0])
stack = [root]
i = 1
while i < len(nums):
node = TreeNode(nums[i])
if not stack:
break
if stack[-1].left is None:
stack[-1].left = node
else:
stack[-1].right = node
stack.pop()
stack.append(node)
i += 1
return root
def preorderTraversal(root):
if not root:
return []
result = []
stack = [root]
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
def inorderTraversal(root):
if not root:
return []
result = []
stack = []
node = root
while stack or node:
while node:
stack.append(node)
node = node.left
node = stack.pop()
result.append(node.val)
node = node.right
return result
```
这里我们用到了栈来实现非递归遍历。在创建二叉树时,我们用一个栈来保存节点,如果当前节点的左子树为空,就将其作为左子树;否则,看是否有右兄弟节点,如果有,就将当前节点弹出栈,并将其右兄弟节点作为新的当前节点;如果没有,就继续将新节点作为左子树。
在先序遍历中,我们将根节点压入栈中,然后弹出栈顶元素,将其值加入结果数组中,再将其右子节点、左子节点依次压入栈中。在中序遍历中,我们需要一直将左子节点压入栈中,直到没有左子节点了,就取出栈顶元素,将其值加入结果数组中,并将当前节点设置为其右子节点,继续进行遍历。
阅读全文