摘要:
接着上面一篇文章。那么如果该二叉树是BST呢?可以利用BST的性质。这题也假设这两个节点同时存在。http://www.360doc.com/content/06/1023/15/11192_238001.shtml“从根结点出发,沿着两个给定结点的公共祖先前进。当这两个结点的值同时小于当前结点的值时,沿当前结点的左指针前进;当这两个结点的值同时大于当前结点的 值时,沿当前结点的右指针前进;当第一次遇到当前结点的值介于两个给定的结点值之间的情况时,这个当前结点就是我们要找的最的最低公共祖先了。”int FindLowestCommonAncestor(node *root, int value 阅读全文
posted @ 2013-08-19 23:23
阿牧遥
阅读(332)
评论(0)
推荐(0)
摘要:
http://ac.jobdu.com/problem.php?pid=1509此题最直观的方法是两次DFS,分别找到这两个节点的path,然后遍历path1和path2做比较,找到最后一个共同的元素。这个普通的做法在:http://blog.csdn.net/thyftguhfyguj/article/details/9232901但有个更好的办法能够一次DFS中找到,没有O(logN)的额外空间。参见:http://www.cnblogs.com/lyunyu/archive/2013/05/11/3073529.html现在这段代码有一个用例没有过,应该是没有同时找到两个节点(比如只找到 阅读全文
posted @ 2013-08-19 22:54
阿牧遥
阅读(658)
评论(0)
推荐(0)
摘要:
思路比较简单。就是当要pop的时候,如果s2为空,才把s1的转过来。总之就是区分一下此时s2为空和非空的情况。http://ac.jobdu.com/problem.php?pid=1512#include #include #include using namespace std; class Queue {public: void push(int val) { s1.push(val); } int pop() { if (s2.empty()) { while(!s1.empty()) ... 阅读全文
posted @ 2013-08-19 22:03
阿牧遥
阅读(179)
评论(0)
推荐(0)
摘要:
经过之前的某题的经验(http://www.cnblogs.com/lautsie/p/3249723.html),这次稍微顺利了点。不过一开始没理解平衡二叉树的概念,应该是对每个左子树和右子树的高度差距不超过一,而不是所有叶子节点的高度不超过一。算法是递归,高度是要递归算的,然后把结果作为引用去更新。public class Solution { public boolean isBalanced(TreeNode root) { boolean[] balanced = new boolean[1]; balanced[0] = true; ... 阅读全文
posted @ 2013-08-19 20:19
阿牧遥
阅读(194)
评论(0)
推荐(0)
摘要:
九度确实烂啊,用cin就超时,必须要scanf。唯一可说的就是pplast和递归打印。也可以用stack,其实和递归一样的空间复杂度。#includeusing namespace std; struct Node{ int val; Node * next;public: Node(int _val) { val = _val; next = NULL; }}; void reversePrint(Node * head){ if (head == NULL) return; else { reve... 阅读全文
posted @ 2013-08-19 14:52
阿牧遥
阅读(207)
评论(0)
推荐(0)
摘要:
先序遍历的一个变化。记录下上次的节点就行了。public class Solution { public void flatten(TreeNode root) { Stack stack = new Stack(); TreeNode n = root; TreeNode last = null; while (n != null || !stack.empty()) { if (n != null) { if (last != null) { ... 阅读全文
posted @ 2013-08-19 13:48
阿牧遥
阅读(190)
评论(0)
推荐(0)
摘要:
动态规划。不过一开始老是把循环中的i写成n。有的时候会忘记i是循环中的边界。public class Solution { public int numTrees(int n) { if (n ==0) return 0; int sum[] = new int[n+1]; sum[1] = 1; for (int i = 2; i <= n; i++) { int total = 0; for (int j = 1; j <=i; j++) { if (j ... 阅读全文
posted @ 2013-08-19 00:24
阿牧遥
阅读(206)
评论(0)
推荐(0)
摘要:
简单题。不过又出现了一次初始状态设置的错误,当numRows==0时所作的设置,numRows==1时也需要。但一开始放到if block里面去了。public class Solution { public ArrayList> generate(int numRows) { ArrayList> ans = new ArrayList>(); if (numRows == 0) return ans; ArrayList tmp = new ArrayList(); tmp.add(1); ans.add(tmp)... 阅读全文
posted @ 2013-08-19 00:00
阿牧遥
阅读(218)
评论(0)
推荐(0)

浙公网安备 33010602011771号