java实现二叉树的三种遍历(前序、中序、后序)

更新时间:2018-08-13 19:45:06 点击次数:1505次

话不多说直接上代码,一切尽在代码中:

public class BinTree { private Node root; private List list=new ArrayList(); public BinTree(){
        Node x=new Node("X",null,null);
        Node y=new Node("Y",null,null);
        Node d=new Node("d",x,y);
        Node e=new Node("e",null,null);
        Node f=new Node("f",null,null);
        Node c=new Node("c",e,f);
        Node b=new Node("b",d,null);
        Node a=new Node("a",b,c);
        root =a;//一定要将树根进行赋值 } //定义节点类: private class Node{ private String data; private Node lchid;//定义指向左子树的指针 private Node rchild;//定义指向右子树的指针 public Node(String data,Node lchild,Node rchild){ this.data=data; this.lchid=lchild; this.rchild=rchild;
      }
    } //前序遍历 public void preOrder(Node node)
    {

           list.add(node); //先将根节点存入list //如果左子树不为空继续往左找,在递归调用方法的时候一直会将子树的根存入list,这就做到了先遍历根节点 if(node.lchid != null)
           {
               preOrder(node.lchid);
           } //无论走到哪一层,只要当前节点左子树为空,那么就可以在右子树上遍历,保证了根左右的遍历顺序 if(node.rchild != null)
           {
               preOrder(node.rchild);
           }
    } /**
     * 对该二叉树进行中序遍历 结果存储到list中
     */ public void inOrder(Node node)
    { if(node.lchid!=null){
           inOrder(node.lchid);
       }
       list.add(node); if(node.rchild!=null){
           inOrder(node.rchild);
       }
    } /**
     * 对该二叉树进行后序遍历 结果存储到list中
     */ public void postOrder(Node node)
    { if(node.lchid!=null){
            postOrder(node.lchid);
        } if(node.rchild!=null){
            postOrder(node.rchild);
        }
        list.add(node);

    } /**
     * 返回当前数的深度
     *  说明:
     *  1、如果一棵树只有一个结点,它的深度为1。
     *  2、如果根结点只有左子树而没有右子树,那么树的深度是其左子树的深度加1;
     *  3、如果根结点只有右子树而没有左子树,那么树的深度应该是其右子树的深度加1;
     *  4、如果既有右子树又有左子树,那该树的深度就是其左、右子树深度的较大值再加1。
     *  
     * @return */ public int getTreeDepth(Node node) { if(node.lchid == null && node.rchild == null)
           { return 1;
           } int left=0,right = 0; if(node.lchid!=null)
           {
               left = getTreeDepth(node.lchid);
           } if(node.rchild!=null)
           {
               right = getTreeDepth(node.rchild);
           } return left>right?left+1:right+1;
       } //得到遍历结果 public List getResult()
    { return list;
    } public static void main(String[] args) { // TODO Auto-generated method stub BinTree tree=new BinTree();
        System.out.println("根节点是:"+tree.root.data);
        tree.preOrder(tree.root); //tree.postOrder(tree.root); for(Node node:tree.getResult()){
            System.out.println(node.data);
        }
    }

} 
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115


本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

回到顶部
嘿,我来帮您!