用c++创建一个5个节点的树并用中序遍历实现打印每个节点的值
时间: 2024-05-16 12:16:37 浏览: 11
以下是用C++创建5个节点的树并用中序遍历打印每个节点的值的示例代码:
```c++
#include <iostream>
using namespace std;
// 定义树节点结构体
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 中序遍历打印树节点的值
void inorder(TreeNode* root) {
if (root == NULL) return;
inorder(root->left);
cout << root->val << " ";
inorder(root->right);
}
int main() {
// 创建5个节点的树
TreeNode* root = new TreeNode(3);
root->left = new TreeNode(2);
root->right = new TreeNode(4);
root->left->left = new TreeNode(1);
root->right->right = new TreeNode(5);
// 中序遍历打印树节点的值
inorder(root);
return 0;
}
```
输出结果为:`1 2 3 4 5`,符合中序遍历的顺序。
相关问题
给定⼀个⼆叉树的根节点 root,返回它的 中序 遍历。用C++实现
中序遍历是指,以 root 为根节点,先遍历 root 的左子树,再遍历 root 节点,最后遍历 root 的右子树。用 C 语言实现的话,可以这样: void inOrder(TreeNode *root) {
if (root == NULL)
return;
inOrder(root->left);
printf("%d ", root->val);
inOrder(root->right);
}
用C++语言写一个通过中序遍历判断是否为二叉搜索树的代码
好的,以下是用 C 语言编写的通过中序遍历判断是否为二叉搜索树的代码:
```c
#include <stdio.h>
#include <stdbool.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 判断二叉树是否为二叉搜索树
bool isValidBST(TreeNode* root) {
static TreeNode* prev = NULL;
if (root == NULL) {
return true;
}
if (!isValidBST(root->left)) {
return false;
}
if (prev != NULL && prev->val >= root->val) {
return false;
}
prev = root;
return isValidBST(root->right);
}
// 中序遍历二叉树
void inorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left);
printf("%d ", root->val);
inorderTraversal(root->right);
}
int main() {
// 创建一棵二叉搜索树
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = 4;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->val = 2;
root->left->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->left->val = 1;
root->left->left->left = NULL;
root->left->left->right = NULL;
root->left->right = (TreeNode*)malloc(sizeof(TreeNode));
root->left->right->val = 3;
root->left->right->left = NULL;
root->left->right->right = NULL;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->val = 6;
root->right->left = (TreeNode*)malloc(sizeof(TreeNode));
root->right->left->val = 5;
root->right->left->left = NULL;
root->right->left->right = NULL;
root->right->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->right->val = 7;
root->right->right->left = NULL;
root->right->right->right = NULL;
// 输出中序遍历序列
printf("中序遍历序列为:");
inorderTraversal(root);
printf("\n");
// 判断是否为二叉搜索树并输出结果
bool result = isValidBST(root);
printf("是否为二叉搜索树:%s\n", result ? "是" : "否");
return 0;
}
```
该代码中,isValidBST 函数通过递归方式中序遍历二叉树,并记录上一个访问的节点 prev,判断当前节点和 prev 的值大小关系是否符合二叉搜索树的定义。如果符合,更新 prev 的值为当前节点,继续访问右子树。如果不符合,返回 false,代表该二叉树不是二叉搜索树。而 inorderTraversal 函数则是为了输出中序遍历序列方便代码测试。