码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树基础算法总结

时间:2014-09-09 20:00:09      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   div   sp   log   c   amp   

记录一些二叉树的基础算法

二叉树节点结构:

typedef struct TreeNode{
    int val;
    struct TreeNode *left;
    struct TreeNode *right;           
}TreeNode,*Node;

1.遍历

前、中、后序递归遍历:

void pre_order_traversal(TreeNode *root){
    if(root! = NULL){
        visit(root);
        pre_order_traversal(root->left);
        pre_order_traversal(root->right);
    }
}
void in_order_traversal(TreeNode *root){
    if(root! = NULL){
        pre_order_traversal(root->left);
        visit(root);
        pre_order_traversal(root->right);
    }
}
void post_order_traversal(TreeNode *root){
    if(root! = NULL){
        pre_order_traversal(root->left);
        pre_order_traversal(root->right);
        visit(root);
    }
}

前、中、后序非递归遍历:

void pre_order_traversal(TreeNode *root){
    if(root==NULL)return;
    stack<TreeNode> stack;
    while(root!=NULL || !stack.empty()){
        if(root){
            visit(root);
            stack.push(root);
            root=root->left;
        }else{
            root=stack.pop();
            root=root->right;
        }
    }
}
void in_order_traversal(TreeNode *root){
    if(root==NULL)return;
    stack<TreeNode> stack;
    while(root!=NULL || !stack.empty()){
        if(root){
            stack.push(root);
            root=root->left;
        }else{
            root=stack.pop();
            visit(root);
            root=root->right;
        }
    }
}
void post_order_traversal(TreeNode *root){
    if(root==NULL)return;
    stack<TreeNode> stack;
    TreeNode *flag = NULL;
    while(root!=NULL || !stack.empty()){
        if(root){
            stack.push(root);
            root=root->left;
        }else{
            root=stack.top();
            if(root->right && root->right != flag){
                root=root->right;
            }else{
                root=stack.pop();
                visit(root);
                flag=root;
                root=NULL;
            }
        }
    }
}

层次遍历:

void level_order_traversal(TreeNode *root){
    if(root == NULL)return;
    queue<TreeNode> queue;
    queue.push(root);
    while(!queue.empty()){
        root = queue.pop();
        visit(root);
        if(root->left){
            queue.push(root->left);
        }
        if(root->right){
            queue.push(root->right);
        }
    }
}

 

二叉树基础算法总结

标签:style   blog   color   os   div   sp   log   c   amp   

原文地址:http://www.cnblogs.com/focus1987/p/3962505.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!