남자의 이진 트리 폭과 깊이 우선 탐색의 우선 탐색은 그녀의 가장 큰 적 소유입니다

가장 큰 적은 우리 자신이다

최근에 펀치 카드 괴짜 시간 21 일, 오늘은 일곱 번째 일 일요일 것을보고, 나는 시간들이이 알고리즘 펀치 훈련 캠프 약간의 연습을 활용하고자하기 때문에 참석하지만 가장 어려운, 토요일 주장 느낌, 그리고 마지막으로 졸업하지만, 그는 여전히, 그렇게 검토에 덜 솔루션과 통합해야 평가의있는 비트 높은 겉 핥기 겉 핥기 일반적으로 사용되는 알고리즘과 데이터 구조를 느끼고있다

재귀의 시작 부분에서 재귀 주요 아이디어는 다음과 같습니다

  • 반복적 인 찾기, 인간의 육체 재귀의 유혹에 저항
  • 문제 (반복 질문)으로 분류되어 가장 가까운을 찾을 수있는 가장 쉬운 방법은, 해결하기 위해 반복 될 수있다
  • 수학 유도 사고

그런 다음 스택과 큐의 사용을 필요로 통과 한 후 순서대로 트리, 이진 트리 프리앰블,,,에, 큐 특히 어떤 코드를 읽을 있음을 인식, 또는이 이진 트리의 사용을 이해하지 못하는 탐색 큐는 더 있다는 것을 이해되어서는 안된다 구현 및 큐의 사용, C 쓰기 알고리즘과 데이터 구조를 사용하기 때문에, 그래서 그들은 큐의 본질에 도착하지 않았다 (당신이 자신의 인프라가 상대적으로 약한 볼 수 있습니다 여기에서 그들이 많은 연습을 필요로하므로, 연습을 많이)

당신은 아직도 당신이 포기하려는 경우를 포함하여, 더 어려운 느낌이 큐를 사용하지만, 당신이 그것에 여부를 만날 다음 시간을 포기해야하는, 여전히 쓰기에, 그래서 치아를 물어 오프 극복 방법을 모른다 그것은 훨씬 더 나은 다음 시간이 될 것입니다. 또한 당신은 당신이 원하는 곳으로 방금 힘, 당신이 원하는 것을 알고 있어야합니다. 같은 당신을 알고 당신이 달성하고자하는 어떤 영향을 이해하고, 분해, 디버그, 피드백, 최적화를 분석해야합니다 프로그램 마찬가지입니다, 당신이 원하는 코드를 작성하는 것이 가능하다.

왜 사람들은 가장 큰 적 자신이라고 말할 수 있습니까?

어려움 여부 심장의 지식의 시대에,이 거기 당신, 당신이 말하는 하나를 천천히 배울 배면에 전원이 넣어, 하나는 말 : 당신이 뒤에 넣어 당신은 여전히하지 않습니다, 당신이 문제는 뛰어 있다면, 당신은 전자를 선택하는 것이 좋습니다 때 것들을 배울 것이 특히 어려운 지식의 현재 수준을 넘어 가면 물론, 현실에서, 물론, 후자의 대부분을 순간 배울 없애하는 것이 좋습니다 그것은 밖으로 해결, 그것은 현재 제거되고, 후자를 선택해야합니다, 발생할 수 있습니다. 이 후자의 사실은 인간의 게으름이다.

발생 욕심, 좋은 일이 아니다, 모두 찾는 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 언어 이진 트리 (생성, 예약 주문, 중위, postorder 재귀 구현 및 비 재귀 예약 주문 (스택), 나무의 높이를 찾을 수) http://www.manongzj.com/blog /3-mcmgrgfddalajnn.html
수준을 달성하기 위해 큐를 사용하여 이진 트리 탐색을 https://blog.csdn.net/lafengxiaoyu/article/details/53240346을

추천

출처www.cnblogs.com/zhangpengfei5945/p/12182172.html