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));
}
}