对称树算法

时间:2017-04-10 18:33:26

标签: java database algorithm tree

我需要帮助解决这个问题。只提示

  

给定二叉树,检查它是否是自身的镜像(即,围绕其中心对称)。   Example

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public boolean isSymmetric(TreeNode root) {
        if((root == null) || (root.left == null && root.right == null)){return true;}

    }

    public boolean helper(TreeNode left, TreeNode right){


    }


}

我遇到的麻烦是以某种方式创建一个递归问题。我很困惑,因为当我们分支出来时,如何使用帮助器将一个回到另一个?

有人可以提供提示吗?

2 个答案:

答案 0 :(得分:1)

递归调用你的助手方法,如下面的

if (left != null && right != null && left.key == right.key)
            return (helper(left.left, right.right)
                    && helper(left.right, right.left));

请注意, 我们正在检查左侧节点的左侧和右侧节点的右侧是否对称,右侧节点的左侧是否对称。如果两者都是对称的,那么主树也将是。

答案 1 :(得分:0)

  1. 如果只有root返回true。
  2. 否则删除root,你会得到两个子发辫,比较根与其他子树。如果它们相同并且没有子树返回true。否则再次删除根,您将获得两个子树。再次执行第二步,直到找到一个根节点。如果在一个子树上找到根节点,但在其他子树上找到null,则返回false。
  3. enter image description here