leetcode 111
2016-09-21 15:09 明星bigdata 阅读(110) 评论(0) 编辑 收藏 举报题目描述:
Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
解法一:非递归方式,使用层序遍历的方法,借助队列,思想比较简单。
int minDepth(TreeNode* root) { int res = 0; if(!root) return res; else { res = 1; queue<TreeNode*> q; q.push(root); int layer_size_left = q.size(); while(!q.empty()) { TreeNode * temp = q.front(); q.pop(); -- layer_size_left; if(temp->left) q.push(temp->left); if(temp->right) q.push(temp->right); if(!temp->left && !temp->right) return res; if(layer_size_left == 0) { ++ res; layer_size_left = q.size(); } } } return res; }
解法二:递归方式,递归方式看上去更简洁一些,而且更易扩展,比如稍作修改即可解出最大深度等,当然非递归方式使用层序遍历解最大深度也不难。
int minDepth(TreeNode* root) { if(!root) return 0; int l = minDepth(root->left); int r = minDepth(root->right); if(!l) return 1 + r; if(!r) return 1 + l; return l > r ? 1 + r : 1 + l; }
两者的运行效率差不太多,leetcode上显示运行时间都是9ms,但是都不是最快的解法,应该还有可以优化的地方!这应该是我接下来努力的方向。