难点在于二叉树插入节点的递归处理
#include <iostream> using namespace std; struct treeNode { int data; treeNode* leftChild; treeNode* rightChild; treeNode(int i) { data = i; leftChild = NULL; rightChild = NULL; } }; treeNode* insert(treeNode* root, int i) { if (root == NULL) { root = new treeNode(i); } else if (i < root->data) { root->leftChild = insert(root->leftChild, i); } else if (i > root->data) { root->rightChild = insert(root->rightChild, i); } return root; } void preOrder(treeNode* root) { if (root == NULL) return; cout << root->data << ' ' ; preOrder(root->leftChild); preOrder(root->rightChild); } void inOrder(treeNode* root) { if (root == NULL) return; inOrder(root->leftChild); cout << root->data << ' ' ; inOrder(root->rightChild); } void postOrder(treeNode* root) { if (root == NULL) return; postOrder(root->leftChild); postOrder(root->rightChild); cout << root->data << ' ' ; } int main() { int n; while (cin >> n) { // 注意 while 处理多个 case // cout << a + b << endl; treeNode* root = NULL; for (int i = 0; i < n; i++) { int temp; cin >> temp; root = insert(root, temp); } preOrder(root); cout << endl; inOrder(root); cout << endl; postOrder(root); cout << endl; } } // 64 位输出请用 printf("%lld")