如何修剪Tic Tac Toe Boards的通用树 - Java递归?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (58)

我试图让每个父节点(每个节点)向我显示其子树有多少输赢。

这将允许我玩一台计算机,以便计算机可以通过转到下一个O获胜最多的子树来优化其移动。

现在我正在尝试重新排列树,以便它可以简单地向我显示其子树有多少输赢。

到目前为止,我有一棵树被订购,以便有9代。

1)第一代有8个兄弟姐妹(每个都有儿童节点)或8个可能的X移动。

2)第二代有7个兄弟姐妹(每个都有儿童节点)或7个可能的移动为O.

3)继续直到上一代有兄弟姐妹和全食宿。

4)我有986410个可能(完整和不完整)的电路板。

此方法当前打印整个树中所有可能的胜利数(对于X和O)。然而,当它应该小于原始数量时,它会使树节点的数量加倍,因为并非所有节点都是胜利。

public void postOrderTraverse(TreeNode T) {

        counter++;

        if (T == null) {
            return;
        } else {

            postOrderTraverse(T.firstChild);
            postOrderTraverse(T.nextSibling);

            // checks diagonals, horizontals and verticals for a set of X's or O's
                if (winOrProgress(T.board, X) == true || winOrProgress(T.board, O) == true) {

                    // prints the game board at this node
                    char[][] gameBoard = T.board;
                    for (int i = 0; i < 3; i++) {
                        for (int j = 0; j < 3; j++) {
                            char value = gameBoard[i][j];
                            System.out.print(value);
                        }
                    }
                    T.firstChild = T;
                    System.out.print(counter);
                    System.out.println("Win");
                }

            }
    }
提问于
用户回答回答于

你在调用之后立即调整计数器,这将计算所有节点甚至是空节点。将其更改为else语句内部。但这只是你问题的一部分。这将正确计算所有节点,而不仅仅是获胜者。如果你只想计算获胜的节点,你需要把它放在那个捕获而不是其他的。

public void postOrderTraverse(TreeNode T) {


    if (T == null) {
        return;
    } else {
         counter++;  //this is where you need to put counter, not before the actual call that way you are not counting null nodes. which you would be adding at most 2 nodes for every node that doesn't have any children.


        postOrderTraverse(T.firstChild);
        postOrderTraverse(T.nextSibling);

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励