给你二叉树的根结点 root ,请你将它展开为一个单链表:
输入:root = [1,2,5,3,4,null,6]
输出:[1,null,2,null,3,null,4,null,5,null,6]
这题比较直观的可以想到,先按照先序遍历的顺序,用每个TreeNode构造一个数组,再把数组中每个元素的left设置为null,right设置为下一个元素。
JavaScript代码实现:
/**
* @param {TreeNode} root
* @return {void} Do not return anything, modify root in-place instead.
*/
var flatten = function (root) {
const nodes = [];
const helper = (node) => {
if (node) {
nodes.push(node);
} else {
return;
}
helper(node.left);
helper(node.right);
};
for (let i = 0; i < nodes.length; i++) {
const node = nodes[i];
node.left = null;
node.right = nodes[i + 1] || null;
}
};
实现了一版竟然不对,迷了,这什么情况???
原来是每调用helper()...太傻比了
var flatten = function (root) {
const nodes = [];
const helper = (node) => {
if (node) {
nodes.push(node);
} else {
return;
}
helper(node.left);
helper(node.right);
};
helper(root);
for (let i = 0; i < nodes.length; i++) {
const node = nodes[i];
node.left = null;
node.right = nodes[i + 1] || null;
}
};