剑指 Offer 36. 二叉搜索树与双向链表
114. 二叉树展开为链表
两道题都用全局变量加dfs来做。
**对于这种题目最关注的就是全局变量。本题中的pre,和head分别表示,向前节点以及头节点。
这里面最关键的代码就是。需要对全局变量的特殊处理
if(pre == null) {
head = cur;
} else {
pre.right = cur;
cur.left = pre;
}
class Solution {
Node pre, head;
public Node treeToDoublyList(Node root) {
if(root == null) return null;
dfs(root);
head.left = pre;
pre.right = head;
return head;
}
void dfs(Node cur) {
if(cur == null) return;
dfs(cur.left);
if(pre == null) {
head = cur;
} else {
pre.right = cur;
cur.left = pre;
}
pre = cur;
dfs(cur.right);
}
}
第二道题关键点还是全局变量。这里采用先序遍历。
关键还是对pre的判断
代码如下:
class Solution {
TreeNode pre;
public void flatten(TreeNode root) {
if(root == null) return;
TreeNode left = root.left;
TreeNode right = root.right;
if(pre != null) {
pre.right = root;
}
pre = root;
root.left = null;
flatten(left);
flatten(right);
}
}
网友评论