zoukankan      html  css  js  c++  java
  • 剑指offer系列16---二叉树的镜像

    【题目】二叉树的镜像
    【思路】方法一:采用递归方式进行交换,先交换根节点的左右节点,接着交换左右结点的左右结点
        方法二:采用非递归方式,即依次遍历左右子树结点依次交换,采用栈操作方式stack

      1 package com.exe4.offer;
      2 import java.util.Stack;
      3 
      4 /**
      5  * 16【题目】二叉树的镜像
      6  *    【思路】方法一:采用递归方式进行交换,先交换根节点的左右节点,接着交换左右结点的左右结点
      7  *             方法二:采用非递归方式,即依次遍历左右子树结点依次交换,采用栈操作方式stack
      8  * @author WGS
      9  *
     10  */
     11 public class TreeMirror {
     12     //二叉树结点定义
     13     public static class TreeNode {
     14         int val = 0;
     15         TreeNode left = null;
     16         TreeNode right = null;
     17 
     18         public TreeNode(int val) {
     19             this.val = val;
     20 
     21         }
     22 
     23     }
     24     //采用递归方式进行交换,先交换根节点的左右节点,接着交换左右结点的左右结点
     25     public void mirrorExchange(TreeNode node){
     26         if(node==null || node.left==null || node.right==null){
     27             return;
     28         }
     29         //开始交换根节点的左右结点
     30         TreeNode tempNode=null;
     31         tempNode=node.left;
     32         node.left=node.right;
     33         node.right=tempNode;
     34         
     35         //继续交换
     36         if(node.left!=null)
     37             mirrorExchange(node.left);
     38         if(node.right!=null)
     39             mirrorExchange(node.right);
     40     }
     41     //采用非递归方式,即依次遍历左右子树结点依次交换,采用栈操作方式s
     42     public void mirrorExchange2(TreeNode root){
     43         if(root==null || root.left==null || root.right==null){
     44             return;
     45         }
     46          Stack<TreeNode> stack = new Stack<TreeNode>();
     47          stack.push(root);
     48          while(!stack.isEmpty()){
     49              TreeNode node=stack.pop();
     50              //交换左右结点
     51              TreeNode temp=node.left;
     52              node.left=node.right;
     53              node.right=temp;
     54              //继续遍历下一个左右结点
     55              if(node.left!=null)
     56                  stack.push(node.left);
     57              if(node.right!=null)
     58                  stack.push(node.right);
     59          }
     60     }
     61 
     62     //前序遍历1
     63     public void preInOreder(TreeNode T){
     64         if(T==null) return;
     65         System.out.println(T.val);
     66         preInOreder(T.left);
     67         preInOreder(T.right);
     68     }
     69      //前序遍历2
     70     public void preOrderTarverse(TreeNode root) {
     71         Stack<TreeNode> s = new Stack<TreeNode>();
     72         while (root != null || !s.isEmpty()) {
     73             //遍历左子树
     74             while (root != null) {
     75                 System.out.println(root.val);
     76                 s.push(root);
     77                 root = root.left;
     78             }
     79             // 左子树遍历结束,继续遍历右子树
     80             if (!s.isEmpty()) {
     81                 root = s.pop();
     82                 root = root.right;
     83             }
     84         }
     85     }
     86 
     87     public static void main(String[] args) {
     88         TreeNode root = new TreeNode(8);
     89         TreeNode node1 = new TreeNode(6);
     90         TreeNode node2 = new TreeNode(10);
     91         TreeNode node3 = new TreeNode(5);
     92         TreeNode node4 = new TreeNode(7);
     93         TreeNode node5 = new TreeNode(9);
     94         TreeNode node6 = new TreeNode(11);
     95 
     96         root.left = node1;
     97         root.right = node2;
     98         node1.left = node3;
     99         node1.right = node4;
    100         node2.left = node5;
    101         node2.right = node6;
    102 
    103         TreeMirror r = new TreeMirror();
    104         r.mirrorExchange2(root);
    105 
    106         r.preOrderTarverse(root);
    107     }
    108 }
  • 相关阅读:
    java实现微信红包分配算法
    认识J2SE
    java设计模式(2)
    java设计模式(1)
    模拟做饭系统(java+线程中的join方法)
    学习接水系统(java+thread线程)
    1. linux系统简介
    Codeforces Round #350 (Div. 2)解题报告
    2014蓝桥杯决赛解题报告
    末学者笔记--Python函数一玄
  • 原文地址:https://www.cnblogs.com/noaman/p/5430395.html
Copyright © 2011-2022 走看看