二叉树的广度遍历和深度遍历非递归

package com.hhy;import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

/**
 * @Information:
 * @Author: HeHaoYuan
 * @Date: Created at 7:53 on 2020/2/13
 * @Package_Name: com.hhy
 */
class BinaryTree {
    class TreeNode {
        int value;
        TreeNode left;
        TreeNode right;

        public TreeNode(int value) {
            this.value = value;
        }
    }


        public int i = 0;

        TreeNode creatTesttree(String s) {
            TreeNode root = null;
            if (s.charAt(i) != '#') {
                root = new TreeNode(s.charAt(i));
                i++;
                root.left = creatTesttree(s);
                root.right = creatTesttree(s);
            } else {
                i++;
            }
            return root;

        }


        //层序遍历
        void binaryTreeLevelOrderNonR(TreeNode root) {
            Queue<TreeNode> queue = new LinkedList();
            if (root != null) {
                queue.offer(root);
            }
            while (!queue.isEmpty()) {
                TreeNode cur = queue.poll();
                System.out.print(cur.value + " ");
                if (cur.left != null) {
                    queue.offer(cur.left);
                }
                if (cur.right != null) {
                    queue.offer(cur.right);
                }

            }
            System.out.println();

        }


        //前序遍历
        void binaryTreePrevOrderNonR(TreeNode root) {
            Stack<TreeNode> stack = new Stack<>();
            TreeNode cur = root;
            TreeNode top = null;
            while (cur!=null || !stack.empty()){
                while (cur!=null){
                    stack.add(cur);
                    System.out.print(cur.value+" ");
                    cur = cur.left;
                }
                top = stack.pop();
                cur = top.right;
            }
            System.out.println();
        }

        //中序遍历
        void binaryTreeInOrderNonR(TreeNode root) {
            Stack<TreeNode> stack = new Stack<>();
            TreeNode cur = root;
            TreeNode top = null;
            while (!stack.empty() || cur != null) {
                while (cur != null) {
                    stack.push(cur);
                    cur = cur.left;
                }
                top = stack.pop();
                System.out.print(top.value + " ");
                cur = top.right;
            }
            System.out.println();
        }

    //后序遍历
    void binaryTreePostOrderNonR(TreeNode root) {
        Stack<TreeNode> stack = new Stack<>();
        TreeNode cur = root;
        TreeNode prev = null;
        while (cur!=null || !stack.empty()){
            while (cur!=null){
                stack.add(cur);
                cur = cur.left;
            }
            cur = stack.peek();
            if (cur.right == null || cur.right == prev){
                stack.pop();
                System.out.print(cur.value+" ");
                prev = cur;
                cur = null;
            }
            else {
                cur = cur.right;
            }
        }
        System.out.println();
    }

    int getsize(TreeNode root){
            if (root == null){
                return 0;
            }
            return getsize(root.left)+getsize(root.right)+1;
    }

    int getleafsize(TreeNode root){
            if (root == null){
                return 0;
            }
            if(root.left==null && root.right==null){
                return 1;
            }
            return getleafsize(root.left)+getleafsize(root.right);
    }

    }
class Test{
    public static void main(String[] args) {
         BinaryTree binaryTree = new BinaryTree();
         BinaryTree.TreeNode root = binaryTree.creatTesttree("ABC###DEF##G###");
         binaryTree.binaryTreeLevelOrderNonR(root);
         binaryTree.binaryTreePrevOrderNonR(root);
         binaryTree.binaryTreeInOrderNonR(root);
         binaryTree.binaryTreePostOrderNonR(root);
         System.out.println( binaryTree.getsize(root));
         System.out.println(binaryTree.getleafsize(root));
    }
}

 

posted @ 2020-02-14 16:37  何浩源  阅读(146)  评论(0)    收藏  举报
//一下两个链接最好自己保存下来,再上传到自己的博客园的“文件”选项中