设为首页 加入收藏

TOP

二叉树的递归遍历和非递归遍历(附详细例子)(一)
2015-07-24 06:51:16 来源: 作者: 【 】 浏览:107
Tags:详细 例子

二叉树的递归遍历和非递归遍历(附详细例子)

二叉树的遍历主要有递归实现和非递归实现,递归实现比较好理解,非递归实现主要是利用了栈的思想,后进先出,本文实现二叉树的非递归遍历主要是用了LinkedList可以当做栈使用的功能。具体例子如下:

package com.sheepmu; 

import java.util.LinkedList;
 
public class BinaryTree
{
    private TreeNode root;// 根节点

    public BinaryTree()
    {
    }
    public BinaryTree(TreeNode root)
    {
        this.root = root;
    }
    public TreeNode getRoot()
    {
        return root;
    }
    public void setRoot(TreeNode root)
    {
        this.root = root;
    }

    /**
     * 节点类
     */
    private static class TreeNode
    {
        private String data = null;// 数据部分
        private TreeNode left;// 左节点的引用
        private TreeNode right;// 右节点的引用
        public TreeNode(String data, TreeNode left, TreeNode right)//节点的构造函数,测试函数中创建节点就是用了它
        {
            this.data = data;
            this.left = left;
            this.right = right;
        }     
        public String getData()//节点类的get和set方法
        {
            return data;
        }
        public void setData(String data)
        {
            this.data = data;
        }
        public TreeNode getLeft()
        {
            return left;
        }
        public void setLeft(TreeNode left)
        {
            this.left = left;
        }
        public TreeNode getRight()
        {
            return right;
        }
        public void setRight(TreeNode right)
        {
            this.right = right;
        }
    }
 
    /**
     *  递归 前续遍历
     */
    public void preOrder(TreeNode node)
    {
        if (node != null)
        {
            System.out.print(node.getData()+"  ");
            preOrder(node.getLeft());
            preOrder(node.getRight());
        }
    }

    /**
     *  递归 中续遍历
     */
    public void inOrder(TreeNode node)
    {
        if (node != null)
        {
        	inOrder(node.getLeft());
        	System.out.print(node.getData()+"  ");
        	inOrder(node.getRight());
        }
    }

    /**
     *  递归 后续遍历
     */
    public void postOrder(TreeNode node)
    {
        if (node != null)
        {
        	postOrder(node.getLeft());
        	postOrder(node.getRight());
        	 System.out.print(node.getData()+"  ");
        }
    }
    
    /**
     *  非递归 前续遍历
     */
    public void preOrderNoRecursion() 
    { 
        LinkedList
  
    stack = new LinkedList
   
    (); stack.push(root); TreeNode current = null; while (!stack.isEmpty()) { current = stack.pop(); System.out.print(current.data+" "); if (current.getRight() != null) stack.push(current.getRight()); if (current.getLeft() != null) stack.push(current.getLeft()); } System.out.println(); } /** * 非递归 中续遍历 */ public void inorderNoRecursion() { LinkedList
    
      stack = new LinkedList
     
      (); TreeNode current = root; while (current != null || !stack.isEmpty()) { while(current != null) { stack.push(current); current = current.getLeft(); } if (!stack.isEmpty()) { current = stack.pop(); System.out.print(current.data+" "); current = current.getRight(); } } System.out.println(); } /** * 非递归 后续遍历 */ public void postorderNoRecursion() { TreeNode rNode = null; TreeNode current = root; LinkedList
      
        stack = new LinkedList
       
        (); while(current != null || !stack.isEmpty()) { while(current != null) { stack.push(current); current = current.getLeft(); } current = stack.pop(); while (current != null && (current.getRight() == null ||current.getRight() == rNode)) { System.out.print(current.data+" "); rNode = current; if (stack.isEmpty()) { System.out.println(); return; } current = stack.pop(); } stack.push(current); current = current.getRight(); } } public static void main(String[] args) { TreeNode l2 = new TreeNode("E", null, null);//这五行构造一棵二叉树 TreeNode r2 = new TreeNode("D", null, null); TreeNode l1 = new TreeNode("B",null, r2);// 根节点左子树 TreeNode r1 = new TreeNode("C", l2, null);// 根节点右子树 TreeNode root = new TreeNode("A", l1, r1);// 创建根节点 BinaryTree bt = new BinaryTree(root); System.out.print(" 递归 前序遍历------->"); bt.preOrder(bt.getRoot()); System.out.print(" 非递归 前序遍历------->"); bt.postor
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇数据结构 - 简单选择排序(simple .. 下一篇leetcode――Reverse Integer 反..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: