计算有两个相同儿子的节点

时间:2017-03-25 17:53:47

标签: c# algorithm recursion data-structures binary-tree

我需要编写操作来计算有两个儿子彼此相等的节点。我试过它,但我得到错误,并非所有代码路径都返回一个值。 请帮我测试一下 谢谢。

private class DistanceMatrixRunner extends AsyncTask<double[][], Void, double[][]> {

    private String getDistance(final double lat1, final double lon1, final double lat2, final double lon2){
        String parsedDistance = null;

        try {
            URL url = new URL("http://maps.googleapis.com/maps/api/directions/json?origin=" + lat1 + "," + lon1 + "&destination=" + lat2 + "," + lon2 + "&sensor=false&units=metric&mode=driving");
            final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            InputStream in = new BufferedInputStream(conn.getInputStream());
            String response = org.apache.commons.io.IOUtils.toString(in, "UTF-8");

            JSONObject jsonObject = new JSONObject(response);
            JSONArray array = jsonObject.getJSONArray("routes");
            JSONObject routes = array.getJSONObject(0);
            JSONArray legs = routes.getJSONArray("legs");
            JSONObject steps = legs.getJSONObject(0);
            JSONObject distance = steps.getJSONObject("distance");
            parsedDistance =distance.getString("text");

        } catch (IOException | JSONException e) {
            e.printStackTrace();
        }

        return parsedDistance;
    }

    @Override protected double[][] doInBackground(double[][]... params) {
        if (params.length == 0) return new double[0][];

        String k;
        double lat1,lat2,lng1,lng2;

        final double[][] latLngData = params[0];
        final int length = latLngData.length;
        double[][] out = new double[length][length];

        for(int i = 0; i < length; i++) {
            lat1 = latLngData[i][0];
            lng1 = latLngData[i][1];

            for (int j = 0; j < length; j++) {
                lat2 = latLngData[j][0];
                lng2 = latLngData[j][1];
                k = getDistance(lat1,lng1,lat2,lng2);
                out[i][j] = Double.parseDouble(k.substring(0,k.length()-2));

                try {
                    // Avoid the API rate limit
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

        return out;
    }

    @Override
    protected void onPostExecute(double[][] doubles) {
        super.onPostExecute(doubles);
        distanceMatrix = doubles;
        // Do any other post-complete updates here
    }
}

2 个答案:

答案 0 :(得分:2)

你需要在If语句之外添加一个返回,如果这个函数返回某个东西,编译器就无法解决。如果你只能在返回0的函数末尾添加一个return语句,它应该可以工作。不是最喜欢的修复,你应该真的重写函数,所以返回实际上不仅仅是一种令人满意的编译器,但它应该工作。

丹尼

答案 1 :(得分:0)

正如您的错误所述,您的当前函数在某些情况下可能没有return语句。

int

错误&#34;并非所有路径都返回值&#34;是正确的。如果执行流程转到第三个if语句并且为false,则不返回任何值。您的函数被定义为始终返回public static int CountWhoHasTwoSameSons(BinNode<int> Head) { if (Head != null) { if (IsLeaf(Head)) return 1; if (Head.HasLeft() && Head.HasRight()) { if (Head.GetRight().GetValue() == Head.GetLeft().GetValue())) return 1 + CountWhoHasTwoSameSons(Head.GetLeft()) + CountWhoHasTwoSameSons(Head.GetRight()); } } return 0; } ,并且不会考虑该情况。

所以,尝试这样的方法来解决它:

{{1}}