#include <iostream>using namespace std;// 二叉树结点定义struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};// 创建二叉树TreeNode* createBinaryTree() { int val; cin >> val; if (val == -1) { // 输入 -1 表示该结点为空 return NULL; } TreeNode* root = new TreeNode(val); root->left = createBinaryTree(); root->right = createBinaryTree(); return root;}// 前序遍历二叉树void preOrderTraversal(TreeNode* root) { if (root == NULL) { return; } cout << root->val << " "; preOrderTraversal(root->left); preOrderTraversal(root->right);}// 中序遍历二叉树void inOrderTraversal(TreeNode* root) { if (root == NULL) { return; } inOrderTraversal(root->left); cout << root->val << " "; inOrderTraversal(root->right);}// 后序遍历二叉树void postOrderTraversal(TreeNode* root) { if (root == NULL) { return; } postOrderTraversal(root->left); postOrderTraversal(root->right); cout << root->val << " ";}int main() { TreeNode* root = createBinaryTree(); cout << "前序遍历结果:"; preOrderTraversal(root); cout << endl; cout << "中序遍历结果:"; inOrderTraversal(root); cout << endl; cout << "后序遍历结果:"; postOrderTraversal(root); cout << endl; return 0;}
时间: 2024-01-17 08:06:17 浏览: 115
好的,那我现在就给您展示一下这份代码的运行结果。
假设我们按照以下方式输入二叉树的结点值:
```
1 2 4 -1 -1 5 -1 -1 3 -1 6 7 -1 -1 -1
```
则创建的二叉树如下所示:
```
1
/ \
2 3
/ / \
4 6 7
/
5
```
然后,程序执行结果如下:
```
前序遍历结果:1 2 4 5 3 6 7
中序遍历结果:4 2 5 1 6 3 7
后序遍历结果:4 5 2 7 6 3 1
```
这里展示了前序、中序和后序三种遍历方式的结果。其中,前序遍历的结果先输出根结点的值,然后依次递归输出左子树和右子树;中序遍历的结果先递归输出左子树,然后输出根结点的值,最后递归输出右子树;后序遍历的结果先递归输出左子树和右子树,然后输出根结点的值。
希望这样的回答能够帮到您。
相关问题
#include<iostream>using namespace std;struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(int v): val(v), left(NULL), right(NULL) {}};TreeNode* buildTree(){ int val; cin >> val; if(val == -1) // 空节点 return NULL; TreeNode* root = new TreeNode(val); root->left = buildTree(); root->right = buildTree(); return root;}int main(){ cout << "请输入二叉树的先序遍历序列(空节点用-1表示):" << endl; TreeNode* root = buildTree(); return 0;}用中序遍历该二叉树
你可以使用递归的方式来中序遍历二叉树,下面是完整代码:
```c++
#include<iostream>
using namespace std;
struct TreeNode{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int v): val(v), left(NULL), right(NULL) {}
};
TreeNode* buildTree(){
int val;
cin >> val;
if(val == -1) // 空节点
return NULL;
TreeNode* root = new TreeNode(val);
root->left = buildTree();
root->right = buildTree();
return root;
}
void inorderTraversal(TreeNode* root){
if(root == NULL)
return;
inorderTraversal(root->left); // 中序遍历左子树
cout << root->val << " "; // 输出当前节点
inorderTraversal(root->right); // 中序遍历右子树
}
int main(){
cout << "请输入二叉树的先序遍历序列(空节点用-1表示):" << endl;
TreeNode* root = buildTree();
cout << "中序遍历结果为:" << endl;
inorderTraversal(root);
return 0;
}
```
该代码中,在构建二叉树的基础上,使用递归的方式来中序遍历二叉树。递归终止条件是节点为空,即返回NULL。每次递归中,先中序遍历左子树,然后输出当前节点,最后中序遍历右子树。用户需要输入先序遍历序列来构建二叉树,程序会输出对应的中序遍历结果。
#include <iostream> using namespace std; // 二叉树结点定义 struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; // 创建二叉树 TreeNode* createBinaryTree() { int val; cin >> val; if (val == -1) { // 输入 -1 表示该结点为空 return NULL; } TreeNode* root = new TreeNode(val); root->left = createBinaryTree(); root->right = createBinaryTree(); return root; } // 前序遍历二叉树 void preOrderTraversal(TreeNode* root) { if (root == NULL) { return; } cout << root->val << " "; preOrderTraversal(root->left); preOrderTraversal(root->right); } // 中序遍历二叉树 void inOrderTraversal(TreeNode* root) { if (root == NULL) { return; } inOrderTraversal(root->left); cout << root->val << " "; inOrderTraversal(root->right); } // 后序遍历二叉树 void postOrderTraversal(TreeNode* root) { if (root == NULL) { return; } postOrderTraversal(root->left); postOrderTraversal(root->right); cout << root->val << " "; } int main() { TreeNode* root = createBinaryTree(); cout << "前序遍历结果:"; preOrderTraversal(root); cout << endl; cout << "中序遍历结果:"; inOrderTraversal(root); cout << endl; cout << "后序遍历结果:"; postOrderTraversal(root); cout << endl; return 0; }
这段代码实现了二叉树的创建和三种遍历方式(前序、中序、后序)。用户可以通过输入一串数字来创建一个二叉树,其中-1表示该节点为空。然后可以通过调用preOrderTraversal、inOrderTraversal、postOrderTraversal函数来分别进行前序、中序、后序遍历。这段代码比较简单易懂,可以用来初学者练习二叉树的操作。
阅读全文