JZ26 二叉搜索树与双向链表
思路:利用ArrayList<treenode>存储TreeNode的中序遍历各个节点,并将节点的左右指针进行指向变化
时间:2021年8月9号</treenode>
public class Solution { public TreeNode Convert(TreeNode pRootOfTree) { if (pRootOfTree == null) return null; ArrayList<TreeNode> list = new ArrayList<>(); //list存储中序遍历的各个节点 Convert(list, pRootOfTree); TreeNode root = Convert(list); return root; } //中序遍历,并通过list来存储中序遍历的各个节点 public void Convert(ArrayList<TreeNode> list, TreeNode pRootOfTree) { if (pRootOfTree.left != null) Convert(list, pRootOfTree.left); list.add(pRootOfTree); if (pRootOfTree.right != null) Convert(list, pRootOfTree.right); } //修改list中各个节点指针的指向 public TreeNode Convert(ArrayList<TreeNode> list) { int size = list.size(); if (size == 1){ list.get(0).left = null; list.get(0).right = null; return list.get(0); } if (size == 2) { list.get(0).left = null; list.get(0).right = list.get(1); list.get(1).left = list.get(0); list.get(1).right = null; return list.get(0); } // list.get(0).left = null; // list.get(0).right = list.get(1); //如果二叉树只有一个节点就会错误 for (int i = 0; i < size; i++) { if (i == 0) { list.get(0).left = null; list.get(0).right = list.get(1); } else if (i == size - 1) { list.get(i).left = list.get(i - 1); list.get(i).right = null; } else { list.get(i).right = list.get(i+1); list.get(i).left = list.get(i-1); } } return list.get(0); }