标签: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