CPP:Binary Tree

void preOrderTraversal(BTNode *root) {  
    if(NULL == root) {
        return;
    }

    printf("%d ", root->val);
    preOrderTraversal(root->lChild);
    preOrderTraversal(root->rChild);
}


void inOrderTraversal(BTNode *root) {  
    if(NULL == root) {
        return;
    }

    inOrderTraversal(root->lChild);
    printf("%d ", root->val); 
    inOrderTraversal(root->rChild);
}  


void postOrderTraversal(BTNode *root) {
    if(NULL == root) {
        return;
    }

    postOrderTraversal(root->lChild);
    postOrderTraversal(root->rChild); 
    printf("%d ", root->val);
}


void inOrderTraversalNonRecursive(BTNode *root) {  
    if(NULL == root) {
        return;
    }

    BTNode *curr = root;
    stack<BTNode> s;
    while(NULL != curr || !s.empty()) {
        while(curr != NULL) {
            s.push(curr);
            curr = curr->lChild;
        }

        if(!s.empty()){
            curr = s.pop();
            cout<<curr->data<<"  ";
            curr = curr->rChild;
        }
    }
}


void postOrderNonRecursive(BTNode *root) {
    if (NULL == root) {
        return;
    }

    stack<BTNode*> stackNode;
    stackNode.push(root);

    BTNode *curr=NULL
          ,*pre =NULL;
    while(!s.empty()) {
        curr=s.top();
        if((NULL == curr->lchild && NULL == curr->rchild)|| (NULL != pre &&(pre == curr->lchild || pre == curr->rchild))) {
            cout<<curr->data<<"";
            stackNode.pop();
            pre=curr;
        } else {
            if(NULL != curr->rchild) {
                stackNode.push(curr->rchild);
            }

            if(curr->lchild!=NULL){
                stackNode.push(curr->lchild);
            }
        }
    }
}


void leverTraversal(BTNode* root) {
    if (NULL == root) {
        return root;
    }

    BTNode* pNode = root;
    queue<BTNode> queueNode;
    queueNode.push(p);


    while(!queueNode.empty()) {
        pNode = queueNode.pop();
        if(NULL != pNode->lchild) {
            queueNode.push(p->lchild);
        }

        if(visit(pNode->rchild) == 1) {
            queueNode.push(p->rchild);
        }
    }  
}


void depthTraversal(BTNode* root){
    if (NULL == root) {
        return root;
    }

    stack<BTNode> stackNode;
    stackNode.push(root);
    Node *node = NULL;

    while(!stackNode.empty()){
        node = stackNode.pop();
        printf("%d ", node->val);
        if(node->rChild){
            stackNode.push(node->rChild);
        }
        if(node->lChild){
            stackNode.push(node->lChild);
        }
    }
}

 

posted @ 2020-03-28 00:14  xinyueliu  阅读(177)  评论(0)    收藏  举报