首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 二叉樹遍歷輸出 ASCII 碼問題:節點數據類型應為 char 而非 int

     編輯:程式設計綜合問答

問題現象

實現二叉樹創建、前序遍歷、深度計算、節點計數、左右子樹交換、層序遍歷。輸入字符構建樹,但遍歷輸出全是 ASCII 碼(如輸入 'A' 輸出 65),而非字符本身。

根本原因

節點結構體中 data 定義為 int 類型:

struct Node {
    int data;        // 錯誤:存儲字符應用 char
    Node *lchild, *rchild;
};

構建樹時 root->data = ch; 將 char 隱式轉換為 int(ASCII 值)。遍歷輸出 cout << root->data 直接打印整數值。

修復方案

  1. 將 data 類型改為 char:
struct Node {
    char data;       // 正確:存儲字符
    Node *lchild, *rchild;
};
  1. 輸入處理保持不變:cin >> ch; 讀取字符(跳過空白符),ch == '#' 判斷空節點。
  2. 輸出時 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 碼,這是初學者常犯的類型混淆錯誤。修改數據類型後,所有遍歷輸出即可正常顯示字符。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved