使用c++分别采用递归和非递归算法实现树的先序,中序,后序遍历,同时实现树的层次遍历。要求:提供菜单进行选择,任给实例并演示求解过程和结果 最后附带运行结果实例演示
时间: 2024-03-23 09:43:52 浏览: 6
二叉树的非递归先序中序后序(数据结构和算法分析)
好的,让我来回答你的问题。
首先,让我们来看看如何实现树的先序,中序,后序遍历和层次遍历。
树的先序遍历:
递归实现:
```
void preOrder(Node* root) {
if (root == NULL) {
return;
}
cout << root->val << " ";
preOrder(root->left);
preOrder(root->right);
}
```
非递归实现:
```
void preOrder(Node* root) {
stack<Node*> s;
s.push(root);
while (!s.empty()) {
Node* node = s.top();
s.pop();
if (node == NULL) {
continue;
}
cout << node->val << " ";
s.push(node->right);
s.push(node->left);
}
}
```
树的中序遍历:
递归实现:
```
void inOrder(Node* root) {
if (root == NULL) {
return;
}
inOrder(root->left);
cout << root->val << " ";
inOrder(root->right);
}
```
非递归实现:
```
void inOrder(Node* root) {
stack<Node*> s;
Node* node = root;
while (!s.empty() || node != NULL) {
if (node != NULL) {
s.push(node);
node = node->left;
} else {
node = s.top();
s.pop();
cout << node->val << " ";
node = node->right;
}
}
}
```
树的后序遍历:
递归实现:
```
void postOrder(Node* root) {
if (root == NULL) {
return;
}
postOrder(root->left);
postOrder(root->right);
cout << root->val << " ";
}
```
非递归实现:
```
void postOrder(Node* root) {
stack<Node*> s;
Node* node = root;
Node* lastVisitedNode = NULL;
while (!s.empty() || node != NULL) {
if (node != NULL) {
s.push(node);
node = node->left;
} else {
Node* peakNode = s.top();
if (peakNode->right != NULL && peakNode->right != lastVisitedNode) {
node = peakNode->right;
} else {
cout << peakNode->val << " ";
lastVisitedNode = peakNode;
s.pop();
}
}
}
}
```
树的层次遍历:
```
void levelOrder(Node* root) {
queue<Node*> q;
q.push(root);
while (!q.empty()) {
Node* node = q.front();
q.pop();
if (node == NULL) {
continue;
}
cout << node->val << " ";
q.push(node->left);
q.push(node->right);
}
}
```
接下来,让我们来完整地实现一个菜单进行选择,任给实例并演示求解过程和结果的程序。
代码如下:
阅读全文