一個簡單的英語到漢語的翻譯過程(搜尋二叉樹)
英語到漢語的翻譯:
原理:在我看來,既可以運用陣列,也可以運用搜索二叉樹,或者是其它任意一種儲存結構應該都可以完成這個操作,但應用搜索二叉樹,效率會更高,因為每一次搜尋,就會排除許多無用的資料。
例如,在上圖中查詢1,只需要通過上圖的3次比較就可以得出結果,每一次排除了多種無效資料。
方法步驟:
1)應用到搜尋二叉樹的每個節點,節點資訊包括英文,漢語,左孩子,右孩子。
3)查詢資料
標頭檔案:英漢詞典.h
#pragma once #include<stdio.h> #include<Windows.h> #include<stdlib.h> #include<string.h>
typedef struct English_Chinese{ char* array1; char*array2; struct English_Chinese*left; struct English_Chinese*right; }En_Ch;
//建立,插入,a->英文,b->漢語 int CreatTree(En_Ch**tree, char*a, char*b) { En_Ch*root = *tree; En_Ch*parent = NULL; while (root != NULL)//如果節點不為空 { if (strncmp((root->array1), a,20) == 0)//由於二叉樹不允許存在兩個關鍵碼相同的數 return -1; parent = root;//父節點指向節點 if (strncmp(root->array1, a,20) ==1)//如果節點的關鍵碼大於a的值,節點指向它的左孩子 root = root->left; else //否則指向它的右孩子 root = root->right; } En_Ch*node = (En_Ch*)malloc(sizeof(En_Ch));//建立新節點 (node->array1) = a; (node->array2 )= b; node->left = NULL; node->right = NULL;
if (parent == NULL)//如果父節點為空,表明為空樹,將新節點作為搜尋二叉樹的根節點。 { *tree = node; return 0; } if (strncmp(parent->array1, a,20) ==1)//如果父節點的關鍵碼大於a的值,父節點的左孩子指向新節點。 parent->left = node; else//否則右孩子指向新節點 parent->right = node; return 0; } //查詢 int Look(En_Ch*tree, char *a) { En_Ch*root = tree; while (root != NULL){ if (strncmp(root->array1, a, 20) == 0) { printf("%s: %s\n", root->array1, root->array2); return 0; } if (strncmp(root->array1, a, 20) > 0) root = root->left; else root = root->right; } if (root == NULL) { printf("%s: 沒找到!\n",a); return -1; } return 0; }
void test() { En_Ch*tree = NULL; CreatTree(&tree, "hehe", "呵呵"); CreatTree(&tree, "apple", "蘋果"); CreatTree(&tree, "blana", "香蕉"); CreatTree(&tree, "like", "喜歡"); CreatTree(&tree, "love", "愛"); CreatTree(&tree, "pink", "粉紅");
Look(tree, "love"); Look(tree, "abfhk");
printf("oo"); }
原始檔:
#include"英漢詞典.h"
int main() { test();
system("pause"); return 0; }