如何加快我的最小二叉树深度功能?

时间:2018-12-21 18:26:04

标签: c optimization binary-tree binary-search-tree

我正在尝试提高代码效率,并尝试使用递归方法解决最小深度树问题,但是我不确定这是否是解决问题的最佳方法。在LeetCode上,我的编码速度比6%的编码器快,但无法对其进行更多的改进。

int minDepth(struct TreeNode* root) {

    if(root == NULL){
        return 0;
    }
    if(root->left == NULL && root->right == NULL){
        return 1;
    }
    if(!root->left){
        return minDepth(root->right) + 1;
    }
    if(!root->right){
        return minDepth(root->left)+1;
    }
    if(minDepth(root->right) > minDepth(root->left)){
        return minDepth(root->left) + 1;
    }else{
        return minDepth(root->right) + 1;
    }
}

2 个答案:

答案 0 :(得分:2)

以前的封闭式解决方案,但与0(与Osiris相比)或递归调用(与lvella相比)的比较少

int minDepth(struct TreeNode* root) {
  if (root == NULL){
    return 0;
  }

  if(root->left == NULL) {
    return (root->right == NULL) ? 1 : minDepth(root->right) + 1;
  }

  if(root->right == NULL) {
    return minDepth(root->left) + 1;
  }

  int r = minDepth(root->right);
  int l = minDepth(root->left);

  return ((r > l) ? l : r) + 1;
}

当然,if (root == NULL)仅对第一次调用有用,但是要删除它,它必须具有2个功能

答案 1 :(得分:1)

如注释中所指出的,如果保存返回值,则可以省去多个调用:

   bcp [BookDb].[dbo].[Books] out C:\Test1.csv -T

当我对其进行测试时,它使我在Leetcode上的运行时间为4毫秒。