package search;
/**
* Created by 灵魂都在冒香气的神 on 2018/2/24.
*/
public class TreeNode
{
public int data;
public TreeNode left;
public TreeNode right;
public Boolean isFirst; //为非递归后序遍历增加的自段
public TreeNode(int num)
{
data=num;
}
public TreeNode()
{
}
}
public static void inorderPrint0(TreeNode root) //递归中序遍历二叉树
{
if (root==null)
{
return;
}
inorderPrint0(root.left);
System.out.println(root.data);
inorderPrint0(root.right);
}
public static void inorderPrint1(TreeNode root) //非递归中序遍历二叉树
{
LinkedList<TreeNode> stack=new LinkedList<>();
while (root!=null||!stack.isEmpty())
{
while (root!=null)
{
stack.push(root);
root=root.left;
}
if (!stack.isEmpty())
{
root=stack.pop();
System.out.println(root.data);
root=root.right;
}
}
}
public static void preorderPrint0(TreeNode root) //递归前序遍历二叉树
{
if (root==null)
{
return;
}
System.out.println(root.data);
preorderPrint0(root.left);
preorderPrint0(root.right);
}
public static void preorderPrint1(TreeNode root) //非递归前序遍历二叉树
{
LinkedList<TreeNode> stack=new LinkedList<>();
while (root!=null||!stack.isEmpty())
{
System.out.println(root.data);
stack.push(root);
root=root.left;
}
if (!stack.isEmpty())
{
root=stack.pop();
root=root.right;
}
}
public static void postorderPrint0(TreeNode root) //递归后序遍历二叉树
{
if (root==null)
{
return;
}
postorderPrint0(root.left);
postorderPrint0(root.right);
System.out.println(root.data);
}
public static void postorderPrint1(TreeNode root) //非递归后序遍历二叉树
{
LinkedList<TreeNode> stack=new LinkedList<>();
while (root!=null||!stack.isEmpty())
{
while (root!=null)
{
root.isFirst=true;
stack.push(root);
root=root.left;
}
if (!stack.isEmpty())
{
root=stack.pop();
if (root.isFirst)
{
root.isFirst=false;
stack.push(root);
root=root.right;
}
else
{
System.out.println(root.data);
root=null;
}
}
}
}