bfs-dfs-bst

来源:互联网 发布:淘宝官换机靠谱吗 编辑:程序博客网 时间:2024/04/30 00:48

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */

bfs :

void bfs(TreeNode *root){if(root==NULL)return;queue<TreeNode *> x;TreeNode *t;x.push(root);while(!x.empty()){t = x.front();if(t->left!=NULL)x.push(t->left);if(t->right!=NULL)x.push(x->right);// do somethingx.pop();}}
递归dfs:

void dfs(TreeNode *root){if(root==NULL)return;if(root->left != NULL)dfs(root->left);if(root->right != NULL)dfs(root->right);// do something}
迭代dfs, post_order traverse,稍微修改left,right顺序,就是其right-middle-left这种形式的访问。

void dfs(TreeNode *root){if(root==NULL)return;stack<TreeNode *> x;unorder<TreeNode *,bool> m;x.push(root);while(!x.empty()){t = x.top();if(t->left != NULL && m[t->left] == 0)x.push(t->left);else if(t->right != NULL && m[t->right] == 0)x.push(t->right);else{// do somethingm[t] = 1;x.pop();}}}
递归inorder

void inorder(TreeNode *root){if(root==NULL)return;if(root->left != NULL)inorder(root->left);// do something with rootif(root->right != NULL)inorder(root->right);}
迭代inorder

void inorder(TreeNode *root){if(root==NULL)return;stack<TreeNode *> x;unordered_map<TreeNode *,bool> m;TreeNode *t;x.push(back);while(!x.empty()){t = x.top();if(t->left != NULL && m[t->left] == 0){t = t->left;x.push(t);}else{x.pop();m[t] = 1;// do somethingif(t->right != NULL)x.push(t->right);}}}

迭代preorder traverse

void inorder(TreeNode *root){if(root==NULL)return;stack<TreeNode *> x;unordered_map<TreeNode *,bool> m;TreeNode *t;x.push(back);while(!x.empty()){t = x.pop();mark[t] = true;// dosomething if(t->left != NULL && m[t->left] == 0)x.push(t->left);if(t->right != NULL && m[t->right] == false)x.push(t->right);}}



0 0