實現二叉樹創建、前序遍歷、深度計算、節點計數、左右子樹交換、層序遍歷。輸入字符構建樹,但遍歷輸出全是 ASCII 碼(如輸入 'A' 輸出 65),而非字符本身。
節點結構體中 data 定義為 int 類型:
struct Node {
int data; // 錯誤:存儲字符應用 char
Node *lchild, *rchild;
};
構建樹時 root->data = ch; 將 char 隱式轉換為 int(ASCII 值)。遍歷輸出 cout << root->data 直接打印整數值。
data 類型改為 char:struct Node {
char data; // 正確:存儲字符
Node *lchild, *rchild;
};
cin >> ch; 讀取字符(跳過空白符),ch == '#' 判斷空節點。cout << root->data 直接打印字符。// 構建樹
Node* Tree::Creat(Node* root) {
char ch;
cin >> ch;
if (ch == '#') root = NULL;
else {
root = new Node;
root->data = ch; // char 存 char
root->lchild = Creat(root->lchild);
root->rchild = Creat(root->rchild);
}
return root;
}
// 前序遍歷輸出
void Tree::PreOrder(Node *root) {
if (root == NULL) return;
cout << root->data; // 直接輸出字符
PreOrder(root->lchild);
PreOrder(root->rchild);
}
// 層序遍歷輸出
void Tree::LeverOrder() {
// ... 同理輸出 q->data
}
C++ 強類型語言中,字符數據必須用 char 類型存儲。用 int 存字符會導致輸出 ASCII 碼,這是初學者常犯的類型混淆錯誤。修改數據類型後,所有遍歷輸出即可正常顯示字符。