图解二叉树的三种遍历方式及java实现代码

  

二叉树(二叉树)是一颗树,其中每个节点都不能有多于两个的儿子。

  

<强> 1。二叉树节点

  

作为图的特殊形式,二叉树的基本组成单元是节点与边;作为数据结构,其基本的组成实体是二叉树节点(二叉树节点),而边则对应于节点之间的相互引用。
  

  

如下,给出了二叉树节点的数据结构图示和相关代码:

  

图解二叉树的三种遍历方式及java实现代码

     //定义节点类:   私有静态类BinNode {   私有对象元素;   私人BinNode lChild;//定义指向左子树的指针   私人BinNode rChild;//定义指向右子树的指针      公共BinNode(对象元素,BinNode lChild, BinNode rChild) {   这一点。元素=元素;   这一点。lChild=lChild;   这一点。rChild=rChild;   }   }   之前      

<强> 2。递归遍历

  

二叉树本身并不具有天然的全局次序,故为实现遍历,需通过在各节点与其孩子之间约定某种局部次序,间接地定义某种全局次序。
  

  

按惯例左兄弟优先于右兄弟,故若将节点及其孩子分别记作V, L和R,则下图所示,局部访问的次序可有VLR, LVR和液压制动三种选择,根据节点V在其中的访问次序,三种策略也相应地分别称作先序遍历,中序遍历和后序遍历,下面将分别介绍。

  

图解二叉树的三种遍历方式及java实现代码

  

<强> 2.1先序遍历

  

图示:   

图解二叉树的三种遍历方式及java实现代码

  

代码实现:

     /* *   *对该二叉树进行前序遍历结果存储到列表中前序遍历   */公共静态无效预订(BinNode节点){   list.add(节点);//先将根节点存入列表//如果左子树不为空继续往左找,在递归调用方法的时候一直会将子树的根存入列表,这就做到了先遍历根节点   如果节点。lChild !=null) {   预订(node.lChild);   }//无论走到哪一层,只要当前节点左子树为空,那么就可以在右子树上遍历,保证了根左右的遍历顺序   如果节点。rChild !=null) {   预订(node.rChild);   }   }   之前      

<强> 2.2中序遍历

  

图示:   

图解二叉树的三种遍历方式及java实现代码

  

代码实现:

     /* *   *对该二叉树进行中序遍历结果存储到列表中   */公共静态无效”(BinNode节点){   如果节点。lChild !=null) {   有条不紊地进行(node.lChild);   }   list.add(节点);   如果节点。rChild !=null) {   有条不紊地进行(node.rChild);   }   }   之前      

<强> 2.3后序遍历

  

实例图示:

  

图解二叉树的三种遍历方式及java实现代码

  

代码实现:

     /* *   *对该二叉树进行后序遍历结果存储到列表中   */公共静态无效后根次序(BinNode节点){   如果节点。lChild !=null) {   后根次序(node.lChild);   }   如果节点。rChild !=null) {   后根次序(node.rChild);   }   list.add(节点);   }   之前      

附:测试相关代码

        私有静态BinNode根;   私有静态List列表=new ArrayList ();      公共静态void main (String [] args) {   init ();//TODO自动生成方法存根//预订(根);//若(根);   后根次序(根);   for (int i=0;我& lt;list.size ();我+ +){   System.out.print (list.get(我)。元素+ " ");   }   }//树的初始化:先从叶节点开始,由叶到根   公共静态孔隙init () {   BinNode b=new BinNode (" b ", null, null);   BinNode=new BinNode (" a ", null, b);   BinNode c=new BinNode (“c”, null);      BinNode e=新BinNode (“e”,空,空);   BinNode g=new BinNode (“g”,空,空);   BinNode f=new BinNode (“f”, e, g);   BinNode h=new BinNode (“h”, f, null);      BinNode d=new BinNode (d、c、h);      BinNode j=new BinNode (“j”,空,空);   BinNode k=新BinNode (“k”, j, null);   BinNode m=新BinNode (“m”,空,空);   BinNode o=new BinNode (“o”,空,空);   BinNode p=新BinNode (“p”, o, null);   BinNode n=new BinNode (“n”, m, p);   BinNode l=new BinNode (“l”, k, n);      根=new BinNode(“我”,d, l);   }      

图解二叉树的三种遍历方式及java实现代码