二叉树类代码:

package binarytree;import linkqueue.LinkQueue;public class BinaryTree {class Node{public Object data;public Node lchild;public Node rchild;public Node(Object data){this.data = data;this.lchild = null;this.rchild = null;}}//根节点private Node root = null;private Node node = null;/*** 创建树* * 以完全二叉树的格式来创建(子树不存在的用0填充),* 对完全二叉树中每一个节点从0开始进行编号,* 那么第i个节点的左孩子的编号为2*i+1,右孩子为2*i+2。* * */void createTree(String strtree){LinkQueue lQueue = new LinkQueue();lQueue.initQueue();/*** 完全二叉树中第i层的结点的个数最多为第1到i-1层上所有节点的个数和* 所以父节点的个数最多为N-1个,N表示节点个数* */for(int parentIndex =0; parentIndex<strtree.split(" ").length/2;parentIndex++){if(root == null){root= new Node(strtree.split(" ")[parentIndex]);//左孩子root.lchild = new Node(strtree.split(" ")[parentIndex*2+1]);lQueue.enQueue(root.lchild);//右孩子root.rchild = new Node(strtree.split(" ")[parentIndex*2+2]);lQueue.enQueue(root.rchild);}else{if(!lQueue.isEmpty() && parentIndex*2+1<strtree.split(" ").length)//队列不空{node = (Node) lQueue.deQueue();if(parentIndex*2+1<strtree.split(" ").length){//左孩子node.lchild = new Node(strtree.split(" ")[parentIndex*2+1]);lQueue.enQueue(node.lchild);}if(parentIndex*2+2<strtree.split(" ").length){//右孩子node.rchild = new Node(strtree.split(" ")[parentIndex*2+2]);lQueue.enQueue(node.rchild);}}else{return;}}}}/*** 先序遍历二叉树* */void preOrderTraverse(Node node){if(node == null){return;}visit(node);preOrderTraverse(node.lchild);preOrderTraverse(node.rchild);}/*** 中序遍历二叉树* */void inOrderTraverse(Node node){if(node == null){return;}inOrderTraverse(node.lchild);visit(node);inOrderTraverse(node.rchild);}/*** 后序遍历二叉树* */void postOrderTraverse(Node node){if(node == null){return;}postOrderTraverse(node.lchild);postOrderTraverse(node.rchild);visit(node);}/*** 打印二叉树* */public void print(){System.out.print("先序遍历:");preOrderTraverse(root);System.out.print("\n中序遍历:");inOrderTraverse(root);System.out.print("\n后序遍历:");postOrderTraverse(root);}/*** 访问节点* */private void visit(Node node){if(!node.data.equals("0")){System.out.print(node.data+" ");}}
}

测试代码(以数据结构中表达式a+b*(c-d)-e/f为例):

package binarytree;public class BinaryTreeMain {public static void main(String[] args) {BinaryTree binaryTree = new BinaryTree();String strtree="- + / a * e f 0 0 b - 0 0 0 0 0 0 0 0 0 0 c d";//0表示没有值的位置binaryTree.createTree(strtree);binaryTree.print();}}

运行结果:

java创建二叉树并递归遍历二叉树相关推荐

  1. 【Java数据结构】非递归遍历二叉树

    目录 1. 定义二叉树结点类TreeNode 2. 前序遍历(非递归) 3. 中序遍历(非递归) 4. 后序遍历(非递归) 1. 定义二叉树结点类TreeNode public class TreeN ...

  2. 由“递归遍历二叉树”引发的思考

    由"递归遍历二叉树"引发的思考 递归的用法我感觉自己已经掌握了,可是今天在递归遍历二叉树时,它又迷一样令我费解.我本人在算法这一块很薄弱,所以想把这个问题发出来,希望有大神能够为我 ...

  3. 二叉树的递归遍历和层序遍历(c/c++)

    递归遍历: 二叉树的三种递归遍历为先序遍历,中序遍历和后续遍历.它们相似之处在于都是对二叉树的递归遍历且对任何一个结点都经过三次,区别之处在于哪一次对该结点进行访问,由此分为先,中,后序遍历.所以对于 ...

  4. 非递归遍历二叉树(后序遍历)

    非递归遍历二叉树(后序遍历) 在二叉树的遍历中,分为递归遍历与非递归遍历.非递归遍历的执行效率较高,时间复杂度小,因此采用非递归遍历有利于提高代码运行效率. //后序遍历非递归实现 void Post ...

  5. 递归遍历二叉树并且求和

    递归遍历二叉树并且求和 一. 创建结点 public class TreeNode { private int value; private TreeNode lnode; private TreeN ...

  6. C语言-数据结构-二叉树的递归遍历和非递归遍历

    看了大量网络相关的理论和程序,多数的C++ 写的,这里使用devC++ 编程语言 C语言; 整合王道考研答案和理论, 还有小甲鱼的数据结构, 郝斌的数据结构,各有特点吧 最值得研究的还是后序遍历的非递 ...

  7. 数据结构——二叉树的递归遍历算法与非递归遍历算法+层次遍历算法

    (文章篇幅有点长,二叉树的递归遍历算法不作详细分析,但是二叉树的非递归遍历算法和层次遍历算法都有非常详细的分析过程,记得往下翻哦!) 二叉树的递归遍历算法实现 我们首先用递归的方法先序遍历创建这样一棵 ...

  8. 数据结构_非递归遍历二叉树(C语言)

    数据结构总目录 非递归遍历二叉树 1. 图文解析 对于链式二叉树,如果要用非递归的方式进行前.中.后序遍历,则需要借助一个栈实现,而层序遍历则需要借助队列来实现. 构建如下二叉树: 非递归先序遍历 ( ...

  9. 中序非递归遍历二叉树

    二叉树的递归算法虽然简单,但是会导致时间复杂度比较高,下面给大家带来用栈实现的二叉树非递归算法 首先定义好二叉树,和元素类型为二叉树的栈 typedef struct BiTNode{TElemTyp ...

最新文章

  1. signature=ecbb5c28a0561484700bbfeebe84cc52,Corps next in line as bond fees are hit by ECB
  2. 字典转json时排序
  3. Depth-first Search深度优先搜索专题5
  4. 监控摄像头接入流媒体服务器的几种方式
  5. 2021年中国床上用品市场趋势报告、技术动态创新及2027年市场预测
  6. 怎样用 Python 控制图片人物动起来?一文就能 Get!
  7. gitz之忽略warning:LF will be replaced by CRLF
  8. 无需activity获得屏幕尺寸
  9. 时空幻境的作者谈怎样做一款好游戏
  10. 麦克纳姆轮全向移动原理(运动速度方向分析)
  11. 【leetCode】69. x 的平方根
  12. vue 中获取屏幕尺寸
  13. lae界面开发工具入门之介绍十三--如何获取数据?
  14. 使用集成学习提升机器学习算法性能
  15. Python入门习题大全——词汇表2
  16. 汽车鸿蒙音响怎么调,汽车音响怎么调试 汽车音响调试步骤方法【详细介绍】...
  17. 小组项目具体分工情况(Web.ui相关)
  18. react调试工具与调试方法
  19. Koch(科赫)雪花绘制
  20. 常见光学材料透过波段表

热门文章

  1. markdown编辑器语法——背景色
  2. 使用Axis2创建一个简单的WebService服务
  3. python numpy模块
  4. Noip前的大抱佛脚----字符串
  5. Hibernate-day04
  6. BZOJ3246 IOI2013Dreaming
  7. learnpythonthehardway EX41 相关
  8. Vigenère 密码
  9. codevs 1227 方格取数 2
  10. 成员资格、授权和安全性(一)