589. N叉树的前序遍历 题解:https://leetcode-cn.com/problems/n-ary-tree-preorder-traversal/solution/javascriptdi-gui-die-dai-by-xiaotanit/
要注意看题目给的条件啊。Node有val和children
// 递归
var preorder = function(root) {
if(!root)return [];
let res = [];
recusion(root);
return res;
function recusion(root){
if(!root)return;
res.push(root.val);
for(let i = 0; i < root.children.length; i++){
recusion(root.children[i]);
}
}
};
// 非递归。迭代
var preorder = function(root) {
if(!root)return [];
console.log(root.children);//3,2,4
let res = [],
arr = [root];//注意这是一个节点,arr存的是节点
while(arr.length){
let current = arr.pop();//①
// let current = arr.shift();//②
res.push(current.val);
//③这个for循环导致的结果是:[1,4,2,3,6,5]
// for(let i = 0; i < current.children.length; i++){
// arr.push(current.children[i]);
// }
// ④
for(let i = current.children.length - 1; i >= 0; i--){
arr.push(current.children[i]);
}
}
return res;
}
发现一个有趣的事情。
如果①和③搭配,结果是[1,4,2,3,6,5],相当于反过来了
但是将pop换成shift,即②和③搭配,结果是[1,3,2,4,5,6] 相当于广度优先了
所以,如果想要正确答案,只能①和④搭配
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root1
* @param {TreeNode} root2
* @return {boolean}
*/
// 递归
var leafSimilar = function(root1, root2) {
let leaves1 = [];
let leaves2 = [];
dfs(root1, leaves1);
dfs(root2, leaves2);
// return leaves1 == leaves2;//这个在JS里不行
return leaves1.join('') === leaves2.join('');
function dfs(node, leaves){
if(!node)return;
if(!node.left && !node.right){
leaves.push(node.val);
}
dfs(node.left, leaves);
dfs(node.right, leaves);
}
};
var leafSimilar = function(root1, root2) {
const getLeaves = tree => {
if(!tree)return [];
if(!tree.left && !tree.right)return [tree.val];
return [...getLeaves(tree.left), ...getLeaves(tree.right)];
}
return getLeaves(root1).join('') === getLeaves(root2).join('');
}