树和森林的相互转换的Java实现
2016-06-03 18:42
344 查看
树 和 二叉树 的对应 : 用 孩子兄弟表示法 将树表示为二叉树.孩子兄弟表示法:
森林与二叉树的相互转化:
123456 | public class Tree_Forest { Object data; Tree_Forest firstchild; //该节点的第一个孩子 Tree_Forest nextsibling; //该节点的下一个兄弟 } |
12345678910111213141516171819202122232425262728293031323334353637 | import java.util.ArrayList; //树和森林. 包括树和森林的相互转化 public class Tree_Forest { Object data; Tree_Forest firstchild; //该节点的第一个孩子,也是左子树 Tree_Forest nextsibling; //该节点的下一个兄弟,也是右子树 //森林转为二叉树,forest表示以二叉链表表示的森林. index 为当前下表; public static Tree_Forest ForestToBinTree(Tree_Forest[] forest, int index){ Tree_Forest binTree; if (forest.length == index) return null ; else { binTree = forest[index]; //剩余森林中的第一颗树 binTree.nextsibling = ForestToBinTree(forest,index+ 1 ); //右子树为森林中剩余的树 } return binTree; } //二叉树转森林 binTre d9f4 e为要转的二叉树; forest存放转换后的森林 public static void BinTreeToForest(Tree_Forest binTree,ArrayList<Tree_Forest> forest){ if (forest == null ) forest = new ArrayList<>(); //目标森林 if (binTree == null ) return ; else { Tree_Forest rightTree = binTree.nextsibling; //二叉树的右子树 binTree.nextsibling = null ; forest.add(binTree); //分离的第一棵树即为 binTree的根节点+其左子树 BinTreeToForest(rightTree,forest); //递归 } } } |
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- C语言二叉树的非递归遍历实例分析
- 使用C语言构建基本的二叉树数据结构
- 一波二叉树遍历问题的C++解答实例分享
- 举例讲解C语言程序中对二叉树数据结构的各种遍历方式
- C++非递归队列实现二叉树的广度优先遍历
- PHP实现的线索二叉树及二叉树遍历方法详解
- C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort