中序遍历二叉树
来源:互联网 发布:手机硬件检测软件 编辑:程序博客网 时间: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
- 【二叉树】中序遍历二叉树
- 中序遍历二叉树
- 中序遍历二叉树
- 中序遍历二叉树
- 二叉树 - 中序遍历
- 中序遍历二叉树
- 中序遍历二叉树
- 二叉树-中序遍历
- 中序遍历二叉树
- 中序遍历线索二叉树
- 二叉树 中序遍历 算法
- 递归中序遍历二叉树
- 二叉树的中序遍历
- 用递归中序遍历二叉树
- 【二叉树遍历】中序------非递归
- 非递归中序遍历二叉树
- 中序遍历二叉树 [非递归]
- 非递归中序遍历二叉树
- 网络安全
- Github Pages
- 51nod 1279
- C++友元函数总结
- POJ 3090Visible Lattice Points
- 中序遍历二叉树
- 纯js 编canvas处理图片, 涂鸦笔、画布图片内容旋转 放大缩小 裁剪框 。兼容ie9及以上 谷歌、360、火狐浏览器
- Criteria对象
- C++中随机函数rand()和srand()的用法
- leetcode Clone Graph
- c语言pentest总结
- 中秋快乐版二维码生成器实现
- Snowflake : 一个类似 Git 原理的文件管理系统
- 如何理解Node.js中 单线程、非阻塞IO、事件驱动