/**
* Created by Administrator on 2018/3/7.
* 线索二叉树转换为双向有序链表
* 考虑到中序遍历线索二叉树的结果为有序序列
*/
public class TreeToList {
public void Convert(TreeNode root){
if(root==null)
return;
TreeNode end = ConvertCore(root,null);//end为有序链表末节点
//返回头结点,再输出
while(end.left!=null)
end = end.left;
while(end.right!=null) {
System.out.print(end.element + " ");
end = end.right;
}
System.out.print(end.element);
}
//node为遍历到的节点,listEnd指向当前链表末端,返回值为加入该node节点和node节点的右子树后链表末端节点
public TreeNode ConvertCore(TreeNode node,TreeNode listEnd){
if(node.left!=null)//转换左子树为有序链表
listEnd = ConvertCore(node.left,listEnd);
node.left = listEnd;//将node节点加入链表
if(listEnd!=null)
listEnd.right = node;
listEnd = node;
if(node.right!=null)//转换右子树为有序链表
listEnd = ConvertCore(node.right,listEnd);
return listEnd;
}
public static void main(String... args){
TreeNode root = new TreeNode(10);
TreeNode lchild = new TreeNode(5);
TreeNode rchild = new TreeNode(12);
TreeNode llchild = new TreeNode(4);
TreeNode lrchild = new TreeNode(7);
root.left = lchild;
root.right = rchild;
lchild.left = llchild;
lchild.right = lrchild;
new TreeToList().Convert(root);
}
}
class TreeNode {
Object element;
TreeNode left;
TreeNode right;
public TreeNode(int id){
element = (Object)id;
}
}
JAVA 线索二叉树转换为双向有序链表
最新推荐文章于 2022-05-22 22:16:49 发布