二叉树的右视图,而无需使用队列中的Java队列、视图、二叉树、Java

2023-09-11 23:16:45 作者:滴了颗星星

这里是C ++实现的右视图二叉树不用排队。当我尝试将其转换为Java的,它不工作。这里是我的Java code:

(我认为最有可能是因为我还没有理解正确的算法和处理maxLevel指针/参考)

 公共静态无效rightView(树节点TNODE){
    INT maxLevel = 0;
    rViewUtil(TNODE,1,maxLevel);
}

公共静态无效rViewUtil(树节点TNODE,INT水平,诠释maxLevel){
    如果(TNODE == NULL)
        返回;
    如果(maxLevel<Ⅲ级){
        System.out.print(tNode.value +);
        maxLevel =水平;
    }
    rViewUtil(tNode.right,等级+ 1,maxLevel);
    rViewUtil(tNode.left,等级+ 1,maxLevel);
}
 

解决方案

在@lifus回答的精神,同时避免可变的状态,您可以使用函数的返回到设置 maxLevel

 公共静态无效rightView(树节点TNODE){
    INT maxLevel = 0;
    rViewUtil(TNODE,1,maxLevel);
}

公共静态INT rViewUtil(树节点TNODE,INT水平,诠释maxLevel){
    如果(TNODE == NULL)
        返回;
    如果(maxLevel<Ⅲ级){
        System.out.print(tNode.value +);
        maxLevel =水平;
    }
    maxLevel = rViewUtil(tNode.right,等级+ 1,maxLevel);
    maxLevel = rViewUtil(tNode.left,等级+ 1,maxLevel);
    返回maxLevel
}
 
今天,带你学会二叉树的打印

HERE is the c++ implementation for right view of binary tree without using queue. When I try to convert it to Java, it is not working. Here is my Java code:

(I think most likely it is because I have not understood the algorithm properly and handling of maxLevel pointers/reference)

public static void rightView(TreeNode tNode){
    int maxLevel = 0;
    rViewUtil(tNode, 1,maxLevel);
}

public static void rViewUtil(TreeNode tNode, int level, int maxLevel){
    if(tNode==null)
        return;
    if(maxLevel < level){
        System.out.print(tNode.value + " ");
        maxLevel = level;
    }
    rViewUtil(tNode.right, level+1, maxLevel);
    rViewUtil(tNode.left, level+1, maxLevel);
}

解决方案

In the spirit of @lifus' answer, but avoiding mutable state, you can use the function return to set maxLevel

public static void rightView(TreeNode tNode){
    int maxLevel = 0;
    rViewUtil(tNode, 1,maxLevel);
}

public static int rViewUtil(TreeNode tNode, int level, int maxLevel){
    if(tNode==null)
        return;
    if(maxLevel < level){
        System.out.print(tNode.value + " ");
        maxLevel = level;
    }
    maxLevel = rViewUtil(tNode.right, level+1, maxLevel);
    maxLevel = rViewUtil(tNode.left, level+1, maxLevel);
    return maxLevel
}