求二叉樹第m層上的第K個結點的值
/* 2.給定以下二叉樹: struct node_t { node_t *left, *right; int value; }; 要求編寫函數 node_t* foo(node_t *node, unsigned int m, unsigned int k); 輸出以 node 為根的二叉樹第 m 層的第 k 個節點值. (level, k 均從 0 開始計數) 注意: .此樹不是完全二叉樹; .所謂的第K個節點,是本層中從左到右的第K個節點 第三題 係統設計題 */ #include <iostream> using namespace std; const int MAX_LENGTH = 100; struct node_t { node_t *left; node_t *right; int value; }; node_t *queue[100]; int level = 0; // 記錄第幾層 int count = 0; // 記錄第level層的第幾個結點 int top = -1; int rear = -1; bool IsQueueEmpty() { return top == rear; } void EnQueue(node_t *node) { queue[++rear] = node; } node_t* DeQueue() { return queue[++top]; } void CreateBiTree(node_t **root) { char ch; cin >> ch; if (ch == '*') { *root = NULL; return; } else { *root = new node_t; (*root)->value = ch; CreateBiTree(&(*root)->left); CreateBiTree(&(*root)->right); } } node_t* foo(node_t *node, unsigned int m, unsigned int k) { node_t *p = node; int last = -1; if (p != NULL) { EnQueue(p); // 入隊 while (!IsQueueEmpty()) { last = rear; while (top < last) { node_t *q = DeQueue(); count++; // 當前層的第X個結點 if (level == m && count == k) { cout << q->value << endl; return q; } if (q->left != NULL) { EnQueue(q->left); } if (q->right != NULL) { EnQueue(q->right); } } level++; count = 0; } } cout << "找不到符合的結點" << endl; return NULL; } int main() { node_t *root; CreateBiTree(&root); cout << "樹建立完畢" << endl; foo(root, 1, 1); return 0; }
最後更新:2017-04-03 15:21:51