最大の敵は自分自身です
最近、パンチカードオタク時間の21日と報告し、今日は七日の日曜日ですが、私は時間を感じる最も困難は、彼らがこのアルゴリズムパンチ合宿の練習のビットを利用したいので参加しましたが、土曜日に主張されており、最後に卒業し、彼はまだ、それはとてもレビューに、あまり解決策になると、それを統合する必要があり、評価されているビットをハイに片言片言一般的に使用されるアルゴリズムとデータ構造を感じています
再帰の当初から、再帰的な主なアイデアは、次のとおりです。
- 反復検索、人間の肉を再帰の誘惑に抵抗
- 問題(繰り返しの質問)に分解され、最も近いを見つけるための最も簡単な方法は、解決するために繰り返すことができます
- 数学的帰納思考
その後、ツリー、バイナリツリーのプリアンブルに、順番に、スタックとキューを使用する必要がトラバーサル、後に、キューは特に何のコードを読んでいない、またはそのバイナリツリートラバーサルキューの使用を理解していない、そこにあることを理解すべきではないことを理解します彼らはキューの本質に取得していないので、Cの書き込みアルゴリズムとデータ構造を使用しているため、キューの実装と使用、(ここからあなたがそう、彼らは練習をたくさん、たくさんの練習を必要とし、自らのインフラが比較的弱い見ることができます)
あなたはまだあなたがあきらめるしたいときなど、より多くの困難を感じるキューを使用していますが、あなたがそれにか会う次回にそれを放棄する必要があり、まだ書き込みに、そう、歯をかむオフ克服する方法がわかりませんそれははるかに良い次の時間になります。また、あなたが望む場所にあなただけかもしれませんが、あなたが望むものを知っている必要があります。同じことが、あなたは知っている、あなたが達成したいどのような影響を与えるのかを理解し、その後、分解したり、デバッグ、フィードバック、最適化を分析するために必要があり、プログラムのために真である、それはあなたがしたいことを書き込みコードすることが可能です。
なぜ人々は、最大の敵は自分自身であることを言うのですか?
背面にオフこのプットはゆっくりと、あなたが言うものを学ぶことができます:あなたは、この背後に置く困難や心臓の知識ではないの回では、2もし、あなたが言う1というのがありますあなたは知識のあなたの現在のレベルを超えた場合、私は、問題は、あなたがジャンプする場合は、元の選択をお勧めするとき、あなたはまだ、それはそれを取り除くために、より良い学ぶための瞬間です、もちろん、現実には後者の大半は、もちろん、物事を学ぶことは特に困難でありません。それが出て修正し、それが現在の解消され、後者を選択してください、発生することがあります。この後者の事実は、人間怠惰です。
そこに遭遇貪欲、良いものではありません、両方のAもBにしたい、あなたは彼はあなたが望むように多くの時間と労力を持っていなかった知ってほしい、最も大切な人のために残さ彼らの最高の時間とエネルギーを置きますそして、の事!
コードは以下の通りであります:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
#define OK 1
#define ERROR 0
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
}TreeNode;
typedef struct {
struct TreeNode* data[MAXSIZE];
int front;
int rear;
}SqQueue;
struct TreeNode* initTree() {
struct TreeNode *root;
int data;
scanf("%d",&data);
if (data == 0) {
root = NULL;
return root;
}else {
root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
if (!root) {
return NULL;
}
root->val = data;
printf("输入%d的左节点", data);
root->left = initTree();
printf("输入%d的右节点", data);
root->right = initTree();
}
return root;
}
int EnQueue(SqQueue *Q,struct TreeNode *root) {
if ((Q->rear+1)%MAXSIZE == Q->front) {
return ERROR;
}
Q->data[Q->rear] = root;
Q->rear = (Q->rear+1) % MAXSIZE;
return OK;
}
int InitQueue(SqQueue *Q) {
Q->front = 0;
Q->rear = 0;
return 1;
}
struct TreeNode* DeQueue(SqQueue *Q) {
struct TreeNode *root;
if (Q->front == Q->rear) {
return ERROR;
}
root = Q->data[Q->front];
Q->front = (Q->front+1) % MAXSIZE;
return root;
}
void queueTraversal(struct TreeNode *root) {
// 利用队列实现层序遍历
if (!root) {
return;
}
// 创建队列
SqQueue q;
InitQueue(&q);
EnQueue(&q,root);
int i = 0;
printf("层序遍历是\n");
while (q.front != q.rear) {
root = DeQueue(&q);
printf("%d ",root->val);
if (root->left)
EnQueue(&q,root->left);
if (root->right)
EnQueue(&q,root->right);
}
printf("\n");
}
void stackTraversal(struct TreeNode *root) {
struct TreeNode* stack[100];
int top = -1;
printf("非递归中序比那里如下:\n");
while (root || top != -1) {
while (root) {
// 把所有左树入栈
top++;
stack[top] = root;
root = root->left;
}
if (top != -1) {
root = stack[top];
top--;
printf("%d ",root->val); // 输出节点数据
root=root->right;
}
}
printf("\n");
}
int main() {
// 开辟头节点
struct TreeNode* tree;
// 将头节点指针传入函数参数为节点指针的参数
tree = initTree();
// 然后根据条件输入创建二叉树
// 使用队列层序遍历二叉树
queueTraversal(tree);
// 使用栈深度遍历二叉树
stackTraversal(tree);
printf("Hello world\n");
return 0;
}
参考記事:
C言語のバイナリツリー(作成、先行順、inorderを、後順再帰的な実装、および非再帰的先行順(スタック)、木の高さを見つける。)http://www.manongzj.com/blog /3-mcmgrgfddalajnn.html
レベルを達成するためにキューを使用してバイナリツリートラバーサルhttps://blog.csdn.net/lafengxiaoyu/article/details/53240346