[剑指Offer]树中两个结点的最低公共祖先 | 指尖的舞客



[剑指Offer]树中两个结点的最低公共祖先 | 指尖的舞客

题解:该题貌似简单,其实陷阱重重。首先分析了题目的陷阱:1. 题中的“树”指什么树?虽然题已经简化为二叉树,但仍然存在问题,比如说BST与普通二叉树就有区别,表示树的数据结构中是否包含指向父结点的指针;2. 给出的结点是否包含在树中(既然说已经是树中的结点了,当然包含,如此考虑只是为了增强算法的健壮性)。 思路:由于带父指针的树,问题直接可以转化为求两条链表的交点,比较简单就不细说了。 class TreeNode{ int value; TreeNode left; TreeNode right; public TreeNode(int value){ this.value = value; } } 1. 考虑BST情况,因为此类情况非常简单。 public TreeNode getLastCommonParentOfBST(TreeNode pRoot, TreeNode pNode1, TreeNode pNode2){ if(pRoot == null) return null; if(pNode1.value > pNode2.value) return getLastCommonParentOfBST(pRoot, pNode2, pNode1); TreeNode tmp = pRoot; while(tmp!=null){ if(pNode1.value>tmp.value) tmp = tmp.right; if(pNode2.value tmp.value) break; } return tmp; }   // 普通二叉树, 假设节点都在树上, 或者都不在 public TreeNode getLastCommonParent(TreeNode pRoot, TreeNode pNode1, TreeNode pNode2){ if(pRoot == null || pNode1 == pRoot || pNode2 == pRoot){ return pRoot; } TreeNode left = getLastCommonParent(pRoot.left, pNode1, pNode2);

Read full article from [剑指Offer]树中两个结点的最低公共祖先 | 指尖的舞客


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts