1、移除链表元素
原题203
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
解题:
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @param {number} val
* @return {ListNode}
*/
var removeElements = function(head, val) {
let ele = {//哨兵元素
next:head
}
let cur = ele;
while (cur.next) {
if (cur.next.val === val) {
cur.next = cur.next.next
}else{
cur = cur.next
}
}
return ele.next
};
2、相同的数
原题100
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:
输入: 1 1
/ \ / \
2 3 2 3
[1,2,3], [1,2,3]
输出: true
示例 2:
输入: 1 1
/ \
2 2
[1,2], [1,null,2]
输出: false
示例 3:
输入: 1 1
/ \ / \
2 1 1 2
[1,2,1], [1,1,2]
输出: false
解题:
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} p
* @param {TreeNode} q
* @return {boolean}
*/
var isSameTree = function(p, q) {
if (p==null&&q==null) {
return true
}
if (p==null||q==null) {
return false
}
if (p.val!=q.val) {
return false
}
return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right)
};
3、翻转二叉树
原题226
翻转一棵二叉树。
示例:
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
解题:
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {TreeNode}
*/
var invertTree = function(root) {
if (root==null) {
return root
}
[root.left,root.right] = [invertTree
(root.right),invertTree(root.left)]
return root
};
4、二叉树的前序遍历
原题144
给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,2,3]
解题:
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
// var preorderTraversal = function(root) {
// let result = [];
// let stack = [];
// let cur = root;
// while (cur||stack.length>0) {
// while (cur) {
// result.push(cur.val)
// stack.push(cur)
// cur = cur.left;
// }
// cur = stack.pop();
// cur = cur.right;
// }
// return result;
// };
var preorderTraversal = function(root,arr=[]) {
if (root==null) {
return arr
}
arr.push(root.val)
preorderTraversal(root.left,arr)
preorderTraversal(root.right,arr)
return arr;
};
5、二叉树的中序遍历
原题94
给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,3,2]
解题:
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
var inorderTraversal = function(root,arr=[]) {
if (root==null) {
return arr
}
inorderTraversal(root.left,arr)
arr.push(root.val)
inorderTraversal(root.right,arr)
return arr
};