用c++创建二叉树"A(B(D,E(H(J,K(L,M(N))))),C(F,G(I)))"并输出,输出H的孩子节点
时间: 2023-11-06 07:07:18 浏览: 35
以下是用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。