您的位置:首页 > 其它

二叉树的递归,迭代(非递归遍历)

2018-02-26 22:19 330 查看
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;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息