二叉树面试题
来源:互联网 发布:淘宝网商品怎么分期购 编辑:程序博客网 时间:2024/05/06 01:42
二叉树的定义
struct TreeNode{ int val; TreeNode *left,*right; TreeNode(int x):val(x),left(0),right(0){}};
1.求二叉树的结点个数
int f(TreeNode *root){ if(!root)return 0; return f(root->left)+f(root->right)+1;}
2.求二叉树的深度
int f(TreeNode *root){ if(!root)return 0; return max(f(root->left),f(root->right))+1;}
3.前、中、后序遍历
void preorderTraversal(TreeNode *root) { if(root) { cout<<root->val<<' '; preorderTraversal(root->left); preorderTraversal(root->right); } } void inorderTraversal(TreeNode *root) { if(root) { inorderTraversal(root->left); cout<<root->val<<' '; inorderTraversal(root->right); } }void postorderTraversal(TreeNode *root){ if(root) { postorderTraversal(root->left); postorderTraversal(root->right); cout<<root->val<<' '; }}
http://blog.csdn.net/hz5034/article/details/45582493
http://blog.csdn.net/hz5034/article/details/45599957
4.层序遍历
void levelorderTraverse(TreeNode *root) {if(!root)return; queue<TreeNode *> q;q.push(root);TreeNode *p;while(!q.empty()) { p=q.front(); q.pop(); cout<<p->val<<' '; if(!p->left)q.push(p->left); if(!p->right)q.push(p->right); } }
http://blog.csdn.net/hz5034/article/details/44275239
5.重建二叉树
//前序+中序TreeNode *rebuild(int pre[],int in[],int n){if(n==0)return 0;TreeNode *root=new TreeNode(pre[0]);int i;for(i=0;i<n;++i){if(in[i]==root->val)break;}//重建左子树root->left=rebuild(pre+1,in,i);//重建右子树root->right=rebuild(pre+i+1,in+i+1,n-i-1);return root;}//中序+后序TreeNode *rebuild(int in[],int post[],int n){if(n==0)return 0;TreeNode *root=new TreeNode(post[n-1]);int i;for(i=0;i<n;++i){if(in[i]==root->val)break;}//重建左子树root->left=rebuild(in,post,i);//重建右子树root->right=rebuild(in+i+1,post+i,n-i-1); return root;}
6.求二叉树中节点的最大距离
struct result{int maxDistance;int maxDepth;};result f(TreeNode *root){if(!root){result r={0,-1};return r;}result left=f(root->left);result right=f(root->right);result r;r.maxDistance=max(max(left.maxDistance,right.maxDistance),left.maxDepth+right.maxDepth+1);r.maxDepth=max(left.maxDepth,right.maxDepth)+1;return r;}
http://www.cnblogs.com/miloyip/archive/2010/02/25/1673114.html
7.二叉树中和为某一值的路径
深搜一:
class Solution {public: vector<vector<int>> pathSum(TreeNode* root, int sum) {vector<vector<int> > result;vector<int> path;dfs(root,sum,result,path);return result;}void dfs(TreeNode *root,int sum,vector<vector<int> > &result,vector<int> &path){if(!root)return;path.push_back(root->val);if(!root->left&&!root->right&&sum==root->val)result.push_back(path);dfs(root->left,sum-root->val,result,path);dfs(root->right,sum-root->val,result,path);path.pop_back();}};
深搜二:
class Solution {public: vector<vector<int>> pathSum(TreeNode* root, int sum) {vector<vector<int> > result;vector<int> path;int s=0;dfs(root,sum,result,path,s);return result;}void dfs(TreeNode *root,int sum,vector<vector<int> > &result,vector<int> &path,int &s) {if(!root)return;path.push_back(root->val);s+=root->val;if(!root->left&&!root->right&&s==sum)result.push_back(path);dfs(root->left,sum,result,path,s);dfs(root->right,sum,result,path,s);s-=path.back();path.pop_back();}};
0 0
- 二叉树面试题
- 【面试题】-二叉树
- 二叉树面试题
- 二叉树 面试题
- 二叉树面试题
- 二叉树面试题
- 二叉树面试题
- 【面试题】二叉树
- 【面试题】二叉树
- 二叉树面试题
- 二叉树面试题
- 二叉树面试题
- 二叉树面试题
- 二叉树面试题
- 二叉树面试题
- 某公司二叉树面试题
- 面试题(二叉树相关)
- 面试题(二叉树相关)
- Android GPS技术之LocationManager
- 手斧Linux – 从LFS到Funtoo (5)
- C#播放wave提示音的类
- 【DP】HDU-3008 Warcraft
- python 网络发送接收数据代码
- 二叉树面试题
- Tarjan算法求LCA(最近公共祖先)
- 手斧Linux – 从LFS到Funtoo (6)
- HTML5学习之路(一)-强大的HTML5
- Spring IoC使用的基本配置
- 手斧Linux – 从LFS到Funtoo (7)
- Android_基础知识_05_推送基础01
- 我之前的博客在DONEWS上
- Java中SimpleDateFormat的简要用法