function traverse(root){
if(root == null) return null;
let tmp = root.left
root.left = root.right
root.right = tmp
traverse(root.left)
traverse(root.right)
}
var invertTree = function(root) {
traverse(root)
return root
};
var invertTree = function(root) {
if(root == null) return null;
let left = invertTree(root.left)
let right = invertTree(root.right)
root.left = right
root.right = left
return root
};
function traverse(node1,node2){
if (node1 == null || node2 == null) return null;
node1.next = node2
traverse(node1.left,node1.right)
traverse(node2.left,node2.right)
traverse(node1.right,node2.left)
}
var connect = function(root) {
if (root == null) return null;
traverse(root.left,root.right)
return root
};
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/933ec465fcdf3340918aebd28ebdc770.png)
- 注意
flatten
函数的签名,返回类型为 void
,也就是说题目希望我们在原地把二叉树拉平成链表,无法通过遍历解决
var flatten = function(root) {
if(root == null ) return null;
flatten(root.left)
flatten(root.right)
let left = root.left
let right = root.right
root.left = null
root.right = left
let p = root
while (p.right !== null){
p = p.right
}
p.right = right
};
var constructMaximumBinaryTree = function (nums) {
const BuildTree = (arr, left, right) => {
if (left > right)
return null;
let maxValue = -1;
let maxIndex = -1;
for (let i = left; i <= right; ++i) {
if (arr[i] > maxValue) {
maxValue = arr[i];
maxIndex = i;
}
}
let root = new TreeNode(maxValue);
root.left = BuildTree(arr, left, maxIndex - 1);
root.right = BuildTree(arr, maxIndex + 1, right);
return root;
}
let root = BuildTree(nums, 0, nums.length - 1);
return root;
}
let index = inorder.findIndex(number => number === root.val)
var buildTree = function(preorder, inorder) {
if(!preorder.length)
return null;
let root = new TreeNode(preorder[0]);
let mid = inorder.findIndex((number) => number === root.val);
root.left = buildTree(preorder.slice(1, mid + 1), inorder.slice(0, mid));
root.right = buildTree(preorder.slice(mid + 1, preorder.length), inorder.slice(mid + 1, inorder.length));
return root;
};
var buildTree = function(inorder, postorder) {
if (!postorder.length) return null
let root = new TreeNode(postorder[postorder.length - 1])
let index = inorder.findIndex(number => number === root.val)
root.left = buildTree(inorder.slice(0, index), postorder.slice(0, index))
root.right = buildTree(inorder.slice(index + 1, inorder.length), postorder.slice(index, postorder.length - 1))
return root
};
var constructFromPrePost = function(pre, post) {
if(pre.length == 0){
return null;
};
let tmp = pre[0];
let index = post.indexOf(pre[1]);
let root = new TreeNode(tmp);
root.left = constructFromPrePost(pre.slice(1,index+2),post.slice(0,index+1));
root.right = constructFromPrePost(pre.slice(index+2),post.slice(index+1,post.length-1));
return root;
};