Ahri-珊
day20将分享LeetCode算法题226,231,234。(时间过得好快0.0)
LeetCode
今天的三道题涉及到二叉树、递归还有链表。
226. Invert Binary Tree
对二叉树求逆。
心路历程
1.方法:递归
2.对二叉树进行层次遍历
3.将当前节点的左右子节点交换
4.子节点执行递归函数
5.递归出口:遍历完所有节点
代码:
var invertTree = function(root) {
if(!root)
return null;
var temp;
temp = root.left;
root.left = root.right;
root.right = temp;
invertTree(root.left);
invertTree(root.right);
return root;
};
231. Power of Two
判断这个数是不是2的幂
心路历程
1.判断一个数是否是2的幂,只需判断它是否能一直被2整除直到结果为1
2.方法:递归
3.n能被2整除将n/2作为下一次递归的参数,若n等于1,返回true
4.n不能被2整除了,直接返回false
5.特殊:n为不能作为被除数的0返回false
代码:
var isPowerOfTwo = function(n) {
if(n==0)
return false;
if(n==1)
return true;
if(n%2==0
return isPowerOfTwo(n/2);
else
return false;
};
234. Palindrome Linked List
判断这是不是一个回文链表
心路历程
1.我的第一反应就是把链表倒过来,值和原始列表相等就是回文链表
2.遍历链表,在对链表求逆的时候将原来链表的值存入数组(好像还不如耍赖直接存数组判断数组是不是回文)
3.比较倒过来的链表的值与数组中对应值是否相等,相等返回true,不等返回false
代码:
var isPalindrome = function(head) {
var copy = [];
var prev = null;
var next = null;
while(head)
{
copy.push(head.val);
next = head.next;
head.next = prev;
prev = head;
head = next;
}
var i = 0;
while(prev)
{
if(prev.val==copy[i])
{
prev = prev.next;
i++;
}
else
return false;
}
return true;
};
Comments