java之多叉树遍历

给出一棵多叉树,每个节点的任意两个子节点都有左右之分。从根节点开始尽量往左走,走不通就回溯,把遇到的字母记录下来,可以得到一个序列,给定一个序列,问有多少棵树与之相应。

分析:设输入的序列为S,d(i,j)为子序列Si~Sj对应树的个数,那么边界条件有

1,当i=j时,d(i,j)=1

2,当i=j&&Si!=Sj时,d(i,j)=0,因为遍历的起点应该与终点是同一点。

3,在其他情况下d[i][j] = sum { d[i+1][k-1]*d[k][j] | i+1

代码如下:

public class ExplorringPyramid {
    // 1.d[i][j] 表示从区间[i,j]之间的字母组成的不同的树的数目
    // 2.d[i][j] = 0 if A[i] != A[j]
    // 3. d[i][j] = 1 if i == j
    // 一棵树如果去掉期最左分支,仍然是一颗树,所以树的数目等于最左分支与剩余部分的乘积
    // 4.d[i][j] = sum { d[i+1][k-1]*d[k][j] | i+1= 0)
            return d[i][j];

        int res = 0;
        if (i == j) {
            res = 1;
        } else if (str.charAt(i) != str.charAt(j)) {
            res = 0;
        } else {
            // 4.d[i][j] = sum { d[i+1][k-1]*d[k][j] | i+1

代码借鉴于:https://blog.csdn.net/qichi_bj/article/details/8284558

你可能感兴趣的:(java之多叉树遍历)