창고로 두 갈래 나무의 범람을 실현하다

2552 단어
 , 。
 、 、 。
 , 

창고 구현 전 순서 반복


창고 구현 전 순서는 비교적 간단하다. 매번 루트 노드를 먼저 출력하고 왼쪽 노드를 출력한 다음에 오른쪽 노드를 출력하기 때문이다.그래서 내 처리 논리는 다음과 같다.
1. 창고가 비어 있지 않으면 루트 노드를 출력하고 창고를 출력한다. 2, 오른쪽 노드를 창고에 눌러라. (존재하는 경우) 3, 왼쪽 노드를 창고에 눌러라. (존재하는 경우) 4. 창고가 비어 있을 때까지 1단계를 반복한다. : 오른쪽 노드를 먼저 누르는 것은 창고의 특성을 고려한 것이기 때문에 교체 과정에서 왼쪽 노드를 먼저 가져와 처리할 수 있다
다음은 코드입니다.
void preTraversal(TreeNode* root){
    if(root==NULL)return;
    TreeNode*cur=root;
    stackS;
    S.push(cur);
    while(!S.empty()){
        cur = S.top();
        cout<val<right!=NULL)S.push(cur->right);
        if(cur->left!=NULL)S.push(cur->left);
    }
    cout<

창고의 중서가 두루 다니다


창고의 중차 순환은 두 겹의 순환이 필요합니다. 왼쪽 노드를 출력해야 하기 때문에 왼쪽 노드가 비어 있을 때까지 아래로 찾아야 출력할 수 있습니다.처리 논리는 다음과 같습니다.
1. 창고 꼭대기 요소가 비어 있지 않고 왼쪽 노드가 존재하면 창고에 넣고 이 과정을 반복합니다.존재하지 않으면 2단계 2로 들어가고, 창고가 비어 있지 않으면 창고 꼭대기 요소를 출력하고 창고를 나간다.방금 창고에서 나온 원소의 오른쪽 노드가 존재하는지 판단하고 2단계를 반복하지 않으며 존재하면 오른쪽 노드를 창고에 넣고 1단계로 건너뛰기
코드는 다음과 같습니다.
void inorderTraversal(TreeNode *root){
    if(root==NULL)return;
    stackS;
    S.push(root);
    while(!S.empty()){
        // 
        while(S.top()->left!=NULL){
            S.push(S.top()->left);
        }
        // S.top() left , , 。
        //while , , 
        while(!S.empty()){
            TreeNode *cur = S.top();
            cout<val<right!=NULL){
                S.push(cur->right);
                break;
            }
        }
    }
    cout<

창고의 뒷차례가 두루 다니다


뒷순서가 중순서의 이중 순환을 반복하는 토대에서 하나의 기록을 추가하여 지난번 창고에서 나온 노드를 전문적으로 기록해야 한다.단계는 다음과 같습니다.
1. 창고 꼭대기 요소가 비어 있지 않고 왼쪽 노드가 존재하면 창고에 넣고 이 과정을 반복합니다.존재하지 않으면 2단계(이 과정과 중차 반복이 일치) 2에 들어가서 지난번 창고 노드가 현재 노드의 오른쪽 노드인지, 또는 현재 노드가 오른쪽 노드가 존재하는지 판단하고 임의의 조건을 만족시켜 현재 노드를 출력하고 창고를 나간다.그렇지 않으면 오른쪽 노드를 창고에 눌러라.1단계로 건너뛰기
void postTraversal(TreeNode* root){
    if(root==NULL)return;
    stackS;
    S.push(root);
    TreeNode* lastPopNode=NULL;
    while(!S.empty()){
        while(S.top()->left!=NULL){
            S.push(S.top()->left);
        }
        while(!S.empty()){
            if(lastPopNode==S.top()->right||S.top()->right==NULL){
                cout<val<right!=NULL){
                S.push(S.top()->right);
                break;
            }
        }
    }
    cout<

좋은 웹페이지 즐겨찾기