두 갈래 나무의 거울을 구하다

5485 단어
제목: 두 갈래 나무의 거울을 구하다
사고방식: 원래의 두 갈래 나무를 파괴하고 원래의 두 갈래 나무를 파괴하지 않으며, 새로운 두 갈래 나무를 새로 만든다.
귀속: 원래의 두 갈래 나무 파괴
  public static TreeNode mirror(TreeNode root){
        if(root == null)
            return null;
        TreeNode left = mirror(root.left);
        TreeNode right = mirror(root.right);
        root.left = right;
        root.right = left;
        return root;  // 
    }

귀속: 원래의 두 갈래 나무를 파괴하지 않는다
public static TreeNode newMirror(TreeNode root){
        if(root == null)
            return null;
        TreeNode node = new TreeNode(root.val);
        node.left = newMirror(root.right);
        node.right = newMirror(root.left);
        return node;
    }

교체: 원래의 두 갈래 나무를 파괴하다
public static void mirrorDestroy(TreeNode root){
        if(root == null)
            return;
          Stack stack = new Stack();
          stack.push(root);
          while(!stack.isEmpty()){
              TreeNode cur = stack.pop();
              
              TreeNode tmp  = cur.right;
              cur.right = cur.left;
              cur.left = tmp;
              
              if(cur.left != null){
                  stack.push(cur.left);
              }
              if(cur.right != null){
                  stack.push(cur.right);
              }
          }
    }

교체: 원래의 두 갈래 나무를 파괴하지 않는다
public static TreeNode mirrorUndestory(TreeNode root){
        if(root == null)
            return null;
        Stack stack = new Stack();
        Stack newStack = new Stack();
        stack.push(root);
        
        TreeNode newRoot = new TreeNode(root.val);
        newStack.push(newRoot);
        
        while(!stack.isEmpty()){
            TreeNode cur = stack.pop();
            TreeNode newCur = newStack.pop();
            
            if(cur.right != null){
                stack.push(cur.right);
                newCur.left = new TreeNode(cur.right.val);
                newStack.push(newCur.left);
            }
            if(cur.left != null){
                stack.push(cur.left);
                newCur.right = new TreeNode(cur.left.val);
                newStack.push(newCur.right);
            }
        }
        return newRoot;
    }

 
다음으로 전송:https://www.cnblogs.com/lfdingye/p/7365999.html

좋은 웹페이지 즐겨찾기