数据结构BinaryTree实例(三):二叉树的后序遍历(递归与非递归)

/**  

*@Title: PostOrder.java

*@Package binarytree

*@Description: TODO

*@author peidong 

*@date 2017-4-28 上午9:30:32

*@version V1.0  

*/

packagebinarytree;

 

importjava.util.Stack;

 

importbinarytree.InOrder.TreeNode;

 

/**

 * @ClassName: PostOrder

 * @Description: 后序遍历二叉树

 * @date 2017-4-28 上午9:30:32

 * 

 */

publicclass PostOrder {

 

       /**

        *

       * @ClassName: TreeNode

       * @Description: 构建树结点

       * @date 2017-4-28 上午9:31:07

       *

        */

       public static class TreeNode{

              public int data;

              public TreeNode left;

              public TreeNode right;

             

              public TreeNode(int data){

                     this.data = data;

                     left = null;

                     right = null;

              }

       }

      

       /**

        *

       * @Title: PostOrderRec

       * @Description: 递归后序遍历二叉树

       * @param @param root   

       * @return void   

       * @throws

        */

       public void postOrderRec(TreeNode root){

              //边界条件

              if(root ==null){

                     return;

              }else{

                     postOrderRec(root.left);

                     postOrderRec(root.right);

                     System.out.println(root.data);

              }

       }

      

       /**

        *

       * @Title: PostOrder

       * @Description: 非递归的方式后序遍历二叉树

       * @param @param root   

       * @return void   

       * @throws

        */

       public void postOrder(TreeNode root) {

              // 边界条件

              if (root == null) {

                     return;

              }

              Stack<TreeNode> tnSatck =new Stack<TreeNode>();

              while (root != null ||tnSatck.empty() == false) {

                     while (root != null) {

                            tnSatck.push(root);   //左子树入栈

                            root = root.left;

                     }

                     if (tnSatck.empty() ==false) {

                            if(root.right ==null||root == null){

                                   tnSatck.pop();

                                   System.out.println(root.data);

                            }else{

                                   root =root.right;

                            }

                     }

              }

       }

       /**

        *@Title: main

        *@Description: TODO

        *@param @param args   

        *@return void   

        *@throws

        */

       public static void main(String[] args) {

              // TODO Auto-generated method stub

 

              PostOrder tree = new PostOrder();

              TreeNode root = new TreeNode(10);

              root.left = new TreeNode(8);

              root.right = new TreeNode(2);

              root.left.left = new TreeNode(3);

              root.left.right = new TreeNode(5);

              root.right.left = new TreeNode(2);

             

              tree.postOrder(root);  //

 

       }

 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值