#include <iostream> #include <queue> using namespace std; struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} }; // 创建二叉树 TreeNode* createBinaryTree() { TreeNode* root = new TreeNode(1); root->left = new TreeNode(2); root->right = new TreeNode(3); root->left->left = new TreeNode(4); root->left->right = new TreeNode(5); return root; } // 前序遍历 void preorder(TreeNode* root) { if (root == nullptr) return; cout << root->val << " "; preorder(root->left); preorder(root->right); } // 中序遍历 void inorder(TreeNode* root) { if (root == nullptr) return; inorder(root->left); cout << root->val << " "; inorder(root->right); } // 后序遍历 void postorder(TreeNode* root) { if (root == nullptr) return; postorder(root->left); postorder(root->right); cout << root->val << " "; } // 层次遍历 void levelOrder(TreeNode* root) { if (root == nullptr) return; queue<TreeNode*> q; q.push(root); while (!q.empty()) { TreeNode* current = q.front(); q.pop(); cout << current->val << " "; if (current->left != nullptr) q.push(current->left); if (current->right != nullptr) q.push(current->right); } } // 计算树高 int height(TreeNode* root) { if (root == nullptr) return 0; return max(height(root->left), height(root->right)) + 1; } // 计算节点数 int countNodes(TreeNode* root) { if (root == nullptr) return 0; return 1 + countNodes(root->left) + countNodes(root->right); } int main() { TreeNode* root = createBinaryTree(); cout << "前序遍历: "; preorder(root); cout << endl; cout << "中序遍历: "; inorder(root); cout << endl; cout << "后序遍历: "; postorder(root); cout << endl; cout << "层次遍历: "; levelOrder(root); cout << endl; cout << "树高: " << height(root) << endl; cout << "节点数: " << countNodes(root) << endl; return 0; }