• 树的前序、中序、后序遍历的JAVA实现


    【注】后续实现第二种方法暂时未解出

      1 package com.exe4.offer;
      2 
      3 import java.util.Stack;
      4 
      5 /**
      6  * 前序、中序、后序遍历方法
      7  * @author WGS
      8  *
      9  */
     10 public class BianliOfBinarryTree {
     11      public static class TreeNode {
     12             int val = 0;
     13             TreeNode left = null;
     14             TreeNode right = null;
     15 
     16             public TreeNode(int val) {
     17                 this.val = val;
     18 
     19             }
     20      }
     21     /**
     22      * 方法一:大话数据结构中简便方法,可实现操作。
     23      * @param args
     24      */
     25     
     26     public void preOrder(TreeNode node){
     27         if(node==null) return;
     28         System.out.print(node.val+"  ");
     29         preOrder(node.left);
     30         preOrder(node.right);
     31     }
     32     public void inOrder(TreeNode node){
     33         if(node==null) return;
     34         inOrder(node.left);
     35         System.out.print(node.val+"  ");
     36         inOrder(node.right);
     37     }
     38     public void postOrder(TreeNode node){
     39         if(node==null) return;
     40         postOrder(node.left);
     41         postOrder(node.right);
     42         System.out.print(node.val+"  ");
     43     }
     44     /**
     45      * 方法二:剑指offer中的方法:加入栈操作
     46      * @param args
     47      */
     48     public void preOrder2(TreeNode node){
     49         Stack<TreeNode> stack=new Stack<TreeNode>();
     50         
     51         while(node!=null || !stack.empty()){
     52             //先遍历左子树
     53             while(node!=null){
     54                 System.out.print(node.val+"  ");
     55                 stack.push(node);
     56                 node=node.left;//左子树遍历结束后,node==null,跳出此循环
     57             }            
     58             //左子树遍历结束,继续遍历右子树
     59             if(!stack.isEmpty()){
     60                 node=stack.pop();//一直返回,直到根节点处,node==null,即stack==isEmpty()
     61                 node=node.right;
     62             }            
     63         }
     64     }
     65     public void inOrder2(TreeNode node){
     66         Stack<TreeNode> stack=new Stack<TreeNode>();
     67         while(node!=null || !stack.isEmpty()){
     68             
     69             while(node!=null){            
     70                 stack.push(node);//8 6  5            
     71                 node=node.left;    //6  5  null
     72             }
     73             
     74             if(!stack.isEmpty()){
     75                 node=stack.pop();//5  6  
     76                 System.out.print(node.val+"  ");//5  6
     77                 node=node.right;//null 
     78             }
     79         }
     80     }
     81     //后序遍历暂时还不会
     82     /*public void postOrder2(TreeNode node){
     83         Stack<TreeNode> stack=new Stack<TreeNode>();
     84         while(node!=null ||  !stack.isEmpty()){
     85             while(node!=null){
     86                 stack.push(node);//8 6 5  7
     87                 node=node.left;//6 5 null null   
     88             }
     89             if(!stack.isEmpty()){
     90                 node=stack.pop();//5 6     7
     91                 node=node.right;//null 7  null
     92             
     93             }
     94             
     95         }
     96     }*/
     97     
     98     public static void main(String[] args) {
     99             TreeNode root = new TreeNode(8);
    100             TreeNode node1 = new TreeNode(6);
    101             TreeNode node2 = new TreeNode(10);
    102             TreeNode node3 = new TreeNode(5);
    103             TreeNode node4 = new TreeNode(7);
    104             TreeNode node5 = new TreeNode(9);
    105             TreeNode node6 = new TreeNode(11);
    106 
    107             root.left = node1;
    108             root.right = node2;
    109             node1.left = node3;
    110             node1.right = node4;
    111             node2.left = node5;
    112             node2.right = node6;
    113             
    114             BianliOfBinarryTree bianli=new BianliOfBinarryTree();
    115             bianli.preOrder(root);
    116             System.out.println("《《前序遍历-------");
    117             bianli.inOrder(root);
    118             System.out.println("《《中序遍历-------");
    119             bianli.postOrder(root);
    120             System.out.println("《《后序遍历-------");
    121             bianli.preOrder2(root);
    122             System.out.println("方法二:《《前序遍历-------");
    123             bianli.inOrder2(root);
    124             System.out.println("方法二:《《中序遍历-------");
    125            // bianli.postOrder2(root);
    126             System.out.println("方法二:《《后序遍历-------");
    127     }
    128 
    129 }
  • 相关阅读:
    .NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记
    《ASP.NET Core 与 RESTful API 开发实战》-- (第10章)-- 读书笔记
    《ASP.NET Core 与 RESTful API 开发实战》-- (第9章)-- 读书笔记(下)
    《ASP.NET Core 与 RESTful API 开发实战》-- (第9章)-- 读书笔记(上)
    《ASP.NET Core 与 RESTful API 开发实战》-- (第8章)-- 读书笔记(尾)
    解决win10桌面图标变成白图标的问题
    微信小程序封装http请求
    Java如何控制某个方法允许并发访问的线程个数----Semaphore
    java实现获取用户IP地址
    shell有减号开头的参数的问题
  • 原文地址:https://www.cnblogs.com/noaman/p/5430325.html
Copyright © 2020-2023  润新知