📅  最后修改于: 2023-12-03 15:10:20.595000             🧑  作者: Mango
在二叉树中,每个节点有左右两个指针。将二叉树转换为双向链表,意味着将每个节点的指针都指向其在链表中的前驱和后继节点。这样可以在O(1)时间内访问链表中的任意一个节点,方便查找和遍历。
下面是Java语言实现的代码片段:
class TreeNode{
int val;
TreeNode left;
TreeNode right;
TreeNode(int val){
this.val = val;
}
}
public class Solution{
public TreeNode treeToDoublyList(TreeNode root){
if(root == null) return null;
TreeNode[] res = dfs(root);
res[0].left = res[1];
res[1].right = res[0];
return res[0];
}
private TreeNode[] dfs(TreeNode root){
TreeNode[] res = new TreeNode[]{root, root};
if(root.left != null){
TreeNode[] left = dfs(root.left);
left[1].right = root;
root.left = left[1];
res[0] = left[0];
}
if(root.right != null){
TreeNode[] right = dfs(root.right);
right[0].left = root;
root.right = right[0];
res[1] = right[1];
}
return res;
}
}
每个节点仅被访问一次,所以时间复杂度为O(n),其中n为节点数。