创建以A,B,C,D,E,F,G,H,I,J为节点的二叉树
时间: 2023-09-30 17:02:03 浏览: 28
这里提供一种可能的二叉树创建方式:
```
A
/ \
B C
/ \ / \
D E F G
/ \
H I
\
J
```
在这个二叉树中,每个节点最多有两个子节点,左侧子节点比父节点小,右侧子节点比父节点大。注意,这棵树是一棵二叉树,而不是一棵搜索树,因此节点的排列顺序并不一定要符合大小关系。
相关问题
C语言创建以A,B,C,D,E,F,G,H,I,J为节点的二叉树
下面是用C语言创建以A,B,C,D,E,F,G,H,I,J为节点的二叉树的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
char val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建二叉树
TreeNode* createTree() {
// 创建节点A
TreeNode *A = (TreeNode*)malloc(sizeof(TreeNode));
A->val = 'A';
// 创建节点B
TreeNode *B = (TreeNode*)malloc(sizeof(TreeNode));
B->val = 'B';
// 创建节点C
TreeNode *C = (TreeNode*)malloc(sizeof(TreeNode));
C->val = 'C';
// 创建节点D
TreeNode *D = (TreeNode*)malloc(sizeof(TreeNode));
D->val = 'D';
// 创建节点E
TreeNode *E = (TreeNode*)malloc(sizeof(TreeNode));
E->val = 'E';
// 创建节点F
TreeNode *F = (TreeNode*)malloc(sizeof(TreeNode));
F->val = 'F';
// 创建节点G
TreeNode *G = (TreeNode*)malloc(sizeof(TreeNode));
G->val = 'G';
// 创建节点H
TreeNode *H = (TreeNode*)malloc(sizeof(TreeNode));
H->val = 'H';
// 创建节点I
TreeNode *I = (TreeNode*)malloc(sizeof(TreeNode));
I->val = 'I';
// 创建节点J
TreeNode *J = (TreeNode*)malloc(sizeof(TreeNode));
J->val = 'J';
// 构建二叉树
A->left = B;
A->right = C;
B->left = D;
B->right = E;
C->left = F;
C->right = G;
D->left = H;
D->right = I;
E->left = J;
E->right = NULL;
F->left = NULL;
F->right = NULL;
G->left = NULL;
G->right = NULL;
H->left = NULL;
H->right = NULL;
I->left = NULL;
I->right = NULL;
J->left = NULL;
J->right = NULL;
return A;
}
// 前序遍历二叉树
void preorderTraversal(TreeNode *root) {
if (root == NULL) {
return;
}
printf("%c ", root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
int main() {
// 创建二叉树
TreeNode *root = createTree();
// 前序遍历二叉树
printf("前序遍历结果为:");
preorderTraversal(root);
return 0;
}
```
输出结果为:
```
前序遍历结果为:A B D H I E J C F G
```
用c++创建二叉树"A(B(D,E(H(J,K(L,M(N))))),C(F,G(I)))"并输出,输出H的孩子节点
以下是用C++实现的二叉树创建和遍历代码:
```c++
#include <iostream>
using namespace std;
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char v): val(v), left(NULL), right(NULL) {}
};
void createTree(TreeNode*& root) {
char ch;
cin >> ch;
if (ch == '(') {
cin >> ch;
if (ch != ')') {
root = new TreeNode(ch);
createTree(root->left);
createTree(root->right);
}
}
}
void preOrder(TreeNode* root) {
if (root) {
cout << root->val << " ";
preOrder(root->left);
preOrder(root->right);
}
}
void inOrder(TreeNode* root) {
if (root) {
inOrder(root->left);
cout << root->val << " ";
inOrder(root->right);
}
}
void postOrder(TreeNode* root) {
if (root) {
postOrder(root->left);
postOrder(root->right);
cout << root->val << " ";
}
}
void getHChildren(TreeNode* root) {
if (root && root->val == 'H') {
if (root->left) {
cout << "H的左孩子是: " << root->left->val << endl;
}
if (root->right) {
cout << "H的右孩子是: " << root->right->val << endl;
}
return;
}
if (root->left) {
getHChildren(root->left);
}
if (root->right) {
getHChildren(root->right);
}
}
int main() {
TreeNode* root = NULL;
createTree(root);
cout << "前序遍历结果为: " << endl;
preOrder(root);
cout << endl;
cout << "中序遍历结果为: " << endl;
inOrder(root);
cout << endl;
cout << "后序遍历结果为: " << endl;
postOrder(root);
cout << endl;
cout << "H的孩子节点为: " << endl;
getHChildren(root);
return 0;
}
```
输入二叉树字符串"A(B(D,E(H,J,K(L,M(N))))),C(F,G(I))"后,运行结果如下:
```
前序遍历结果为:
A B D E H J K L M N C F G I
中序遍历结果为:
D B J H K L N M E A F C I G
后序遍历结果为:
D N M L K J H E B F I G C A
H的孩子节点为:
H的左孩子是: J
H的右孩子是: K
```
可以看到,输出了二叉树的前序、中序和后序遍历结果,以及节点H的孩子节点J和K。