【数据结构】二叉树(3)
发布时间:2021-03-30 15:10 所属栏目:53 来源:网络整理
导读:需要注意的是我在每个结点还保存了父节点,因此在创建的时候要给每个结点的父亲指针赋值。以从键盘输入一棵先序遍历树来创建二叉树为例,代码如下 public void createTree() {Scanner in = new Scanner(System.in);
需要注意的是我在每个结点还保存了父节点,因此在创建的时候要给每个结点的父亲指针赋值。以从键盘输入一棵先序遍历树来创建二叉树为例,代码如下 public void createTree() { Scanner in = new Scanner(System.in); root = createPreOrder(in,root); } private BinaryTreeNode createPreOrder(Scanner in,root.rchild); if (root.rchild != null) root.rchild.parent = root; // 双亲节点主要用在寻找前驱和后继 return root; } }这里我再一次深深的厌恶java不能像C++里面那样有&引用传递或者传递指针(类比这里应该就是传递二级指针),导致无法在函数里面改变"引用"的值,而必须通过函数的返回值。所以看起来没有C++写的紧凑。 注:代码里面使用到的Stack是自己封装的,所以可能会与jdk中的有所差别。 测试使用封装的BinaryTree类进行测试 public static void main(String[] args) { BinaryTree tree = new BinaryTree(); int[] array = {1,0}; tree.createTree(array); System.out.println("先序递归遍历"); tree.preOrder(tree.root); System.out.println("\n中序递归遍历"); tree.inOrder(tree.root); System.out.println("\n后序递归遍历"); tree.postOrder(tree.root); System.out.println("\n先序非递归遍历"); tree.preOrder(); System.out.println("\n中序非递归遍历"); tree.inOrder(); System.out.println("\n后序非递归遍历"); tree.postOrder(); System.out.println("\n层序遍历"); tree.levelOrder(); System.out.println("\n层序遍历,每层换行"); tree.levelOrderH(); }打印结果: 先序递归遍历 1 2 4 7 5 3 6 8 中序递归遍历 4 7 2 5 1 8 6 3 后序递归遍历 7 4 5 2 8 6 3 1 先序非递归遍历 1 2 4 7 5 3 6 8 中序非递归遍历 4 7 2 5 1 8 6 3 后序非递归遍历 7 4 5 2 8 6 3 1 层序遍历 1 2 3 4 5 6 7 8 层序遍历 1 2 3 4 5 6 7 8 add at 2015年11月13日22:25:42 经过网友Gun计划的提醒我添加了一个层序遍历的方法命名为levelOrderH,H意为Human,更人性化一点。每层打印完后换行,采用两个队列,很巧妙地实现,以前做过,所以很快能做出来哈哈。还可以加一个标记行结束也可以实现。 (编辑:ASP站长网) |
相关内容
网友评论
推荐文章
热点阅读