一颗N个节点的完全二叉树以向量作为存储结构,非递归先序遍历,用代码实现
时间: 2023-08-31 21:37:32 浏览: 114
### 回答1:
以下是实现非递归先序遍历的代码:
```
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
if (root == NULL) return result;
stack<TreeNode*> s;
s.push(root);
while (!s.empty()) {
TreeNode* cur = s.top();
s.pop();
result.push_back(cur->val);
if (cur->right != NULL) {
s.push(cur->right);
}
if (cur->left != NULL) {
s.push(cur->left);
}
}
return result;
}
```
这段代码实现了非递归先序遍历二叉树的功能。首先,如果根节点为空,直接返回一个空的vector。然后使用一个栈,将根节点压入栈中,然后开始循环。每次从栈中取出一个节点并将其值加入结果数组中,如果该节点有右子节点,将其右子节点压入栈中,如果该节点有左子节点,将其左子节点压入栈中。最终,返回结果数组。
### 回答2:
完全二叉树是指除了最后一层之外,其他层都是满的,并且最后一层的节点都尽量靠左排列。
非递归先序遍历二叉树的实现思路如下:
1. 初始化一个栈,将根节点压入栈中。
2. 循环,直到栈为空:
a. 出栈一个节点,访问该节点。
b. 若该节点的右子节点不为空,则将右子节点压入栈中。
c. 若该节点的左子节点不为空,则将左子节点压入栈中。
下面是具体的代码实现:
```python
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
def preorderTraversal(root):
stack = []
stack.append(root)
while stack:
node = stack.pop()
print(node.value)
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
# 构造一个完全二叉树
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
root.right.left = Node(6)
root.right.right = Node(7)
preorderTraversal(root)
```
这段代码首先定义了一个`Node`类表示树的节点,每个节点包含一个值以及左右子节点。然后定义了`preorderTraversal`函数进行非递归的先序遍历,通过一个栈来辅助实现。
最后,创建一个完全二叉树并调用`preorderTraversal`函数进行遍历打印结果。
### 回答3:
非递归先序遍历完全二叉树的代码如下:
```python
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def preorderTraversal(root):
stack = []
result = []
node = root
while node or stack:
while node:
result.append(node.data) # 访问当前节点
stack.append(node) # 将当前节点压入栈
node = node.left # 遍历左子树
if stack:
node = stack.pop() # 弹出栈顶元素
node = node.right # 遍历右子树
return result
# 创建一个完全二叉树
def createCompleteBinaryTree(arr, index, n):
root = None
if index < n:
root = Node(arr[index])
root.left = createCompleteBinaryTree(arr, 2 * index + 1, n)
root.right = createCompleteBinaryTree(arr, 2 * index + 2, n)
return root
# 示例使用
arr = [1, 2, 3, 4, 5, 6, 7]
n = len(arr)
root = createCompleteBinaryTree(arr, 0, n)
result = preorderTraversal(root)
print(result)
```
这段代码使用了栈来辅助实现非递归先序遍历。首先将根节点压入栈,然后开始循环,一直到栈为空为止。在循环中,首先访问栈顶元素,并将其加入结果列表中,接着将当前节点压入栈,并遍历其左子树,直到当前节点为空。当当前节点为空且栈不为空时,弹出栈顶元素,然后遍历其右子树。重复以上步骤直到栈为空,最后返回结果列表。
以上代码创建了一个具有7个节点的完全二叉树,并对其进行非递归先序遍历。输出结果为[1, 2, 4, 5, 3, 6, 7]。
阅读全文