두 갈래 나무의 비귀속 역력(귀속 사상을 참고하여 비귀속 역력을 실현)

6860 단어 두 갈래 나무
1 //  

2 typedef struct TNode

3 {

4     int value;

5     TNode *left;

6     TNode *right;

7 }*PTNode;

1. 앞의 순서가 두루 흐르는 비귀속 실현(귀속 사상을 참고하여 실현)
생각:
  • 한 결점에 접근할 때, 먼저 그것을 창고에 넣고, 창고 노드가 P라고 가정하면..
  • P를 방문하여 P의 오른쪽 아이와 왼쪽 아이를 순서대로 창고에 넣으면 매번 왼쪽 아이가 오른쪽 아이 앞에서 방문할 것을 보장한다..
  •  1 void preOrderNoneRecursion(PTNode root)
    
     2 {
    
     3     if(root == NULL)
    
     4       return;
    
     5     PTNode p = root;
    
     6     stack<PTNode> nodeStack;
    
     7     nodeStack.push(p);
    
     8     while(!nodeStack.empty())
    
     9     {
    
    10       p = nodeStack.top();
    
    11       nodeStack.pop();
    
    12       cout << p->value;
    
    13       if(p->right != NULL)
    
    14         nodeStack.push(p->right);
    
    15       if(p->left != NULL)
    
    16         nodeStack.push(p->left);
    
    17     }
    
    18 }            

     
    2. 중서적 반복의 비귀속 실현(귀속 사상을 참고하여 실현)
    //'귀속 사상을 참고하여 실현하다---중서가 두루 흐르는 비귀속 실현'은 아직 생각해 내지 못했다
    3. 뒤이어 반복되는 비귀속 실현(귀속 사상을 참고하여 실현)
    생각:
  • 한 결점에 접근할 때, 먼저 그것을 창고에 넣고, 창고 노드가 P라고 가정하면..
  • P가 왼쪽 아이와 오른쪽 아이가 없으면 P를 직접 방문한다.또는 P는 왼쪽 아이나 오른쪽 아이가 존재하지만 P의 왼쪽 아이와 오른쪽 아이가 모두 방문한 적이 있다면 마찬가지로 P를 직접 방문한다..
  • 만약에 상기 두 가지 상황이 아니라면 P의 오른쪽 아이와 왼쪽 아이를 순서대로 창고에 넣는다. 그러면 매번 왼쪽 아이가 오른쪽 아이 앞에서 방문하고 왼쪽 아이와 오른쪽 아이가 뿌리 결점 앞에서 방문된다는 것을 보장한다
  •  1 void postOrderNoneRecursion(PTNode root)
    
     2 {
    
     3     if(root == NULL)
    
     4       return;
    
     5     PTNode p = root;
    
     6     PTNode pre = NULL;
    
     7     stack<PTNode> nodeStack;
    
     8     nodeStack.push(p);
    
     9     while(!nodeStack.empty())
    
    10     {
    
    11       p = nodeStack.top()
    
    12         
    
    13       if( (p->left == NULL && p->right == NULL) 
    
    14           || ((pre! == NULL) && (pre == p->left || pre == p->right))
    
    15       {
    
    16           cout << p->value;
    
    17           nodeStack.pop();
    
    18           pre = p;
    
    19       }
    
    20       else
    
    21       {
    
    22           if(p->right != NULL)
    
    23             nodeStack.push(p->right);
    
    24         if(p->left != NULL)
    
    25             nodeStack.push(p->left);
    
    26       }
    
    27     }
    
    28 }

    기사 참조:
    http://www.cnblogs.com/dolphin0520/archive/2011/08/25/2153720.html
    http://blog.csdn.net/sjf0115/article/details/8645991

    좋은 웹페이지 즐겨찾기