中序遍历二叉树

来源:互联网 发布:手机硬件检测软件 编辑:程序博客网 时间:2024/05/21 14:46

中序遍历二叉树,递归实现中序遍历二叉树,先左孩子进栈,然后输出当前节点,最后右孩子进栈。非递归实现中序遍历二叉树,需要借助栈来实现。

如果二叉树不为空,将二叉树的根节点压栈

栈有个特点是先进后出,所以要先让左孩子一直进栈

如果当前节点为空,则栈顶出栈,赋值给当前节点输出刚出栈的栈顶元素

让当前节点的右孩子节点指向当前节点,接着下次循环,一直让左孩子进栈

实现过程如下所示:

package cn.edu.nwu.tree;import java.util.Stack;/** * @author jcm * *时间 2016年9月15日 */public class GetTreeNodeInOrderTraver {public static void main(String[] args) {TreeNode root = CreateBinaryTree.createTreeNode();System.out.println("递归实现二叉树中序遍历");inOrderRecursion(root);System.out.println();System.out.println("非递归实现二叉树中序遍历");inOrder(root);}/** * @author jcm * 递归实现二叉树的中序遍历 * (1)如果二叉树为空,空操作 * (2)如果二叉树不为空,访问根节点,中序遍历左子树,中序遍历右子树  * @param root */private static void inOrderRecursion(TreeNode root) {if(root == null){return;}inOrderRecursion(root.leftChild);System.out.print(root.data+" ");inOrderRecursion(root.rightRight);}/** * @author jcm * 非递归实现二叉树中序遍历,需要借助栈来实现 * 如果二叉树不为空,将二叉树的根节点压栈 * 栈有个特点是先进后出,所以要先让左孩子一直进栈 * 如果当前节点为空,则栈顶出栈,赋值给当前节点输出刚出栈的栈顶元素 * 让当前节点的右孩子节点指向当前节点,接着下次循环,一直让左孩子进栈 * @param root */private static void inOrder(TreeNode root) {if(root == null){return ;}Stack<TreeNode> stack = new Stack<TreeNode>();stack.push(root);//当前节点指向根节点的左孩子节点TreeNode current = root.leftChild;while(!stack.isEmpty() || current != null){//左孩子一直在压栈while(current != null){stack.push(current);current = current.leftChild;}//左孩子先出栈,然后把当前节点的右孩子节点赋值给当前节点if(!stack.isEmpty()){current = stack.pop();System.out.print(current.data+" ");current = current.rightRight;}}}}


0 0
原创粉丝点击