2024/9/2 Hot100 binaryTree 昨日公共节点第二种解法
This commit is contained in:
parent
2a72ebc5eb
commit
8fc3fadc94
|
@ -12,35 +12,51 @@ import java.util.*;
|
|||
* Level ?
|
||||
*/
|
||||
public class Num236 {
|
||||
//
|
||||
// Map<Integer, TreeNode> map = new HashMap<>();
|
||||
// LinkedList<TreeNode> list = new LinkedList<>();
|
||||
// List<LinkedList<TreeNode>> linkedLists = new ArrayList<>();
|
||||
private TreeNode res;
|
||||
|
||||
Map<Integer, TreeNode> map = new HashMap<>();
|
||||
LinkedList<TreeNode> list = new LinkedList<>();
|
||||
List<LinkedList<TreeNode>> linkedLists = new ArrayList<>();
|
||||
|
||||
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
|
||||
if (root == null) return null;
|
||||
// if (root == null) return null;
|
||||
// dfs(root, p, q);
|
||||
// TreeNode node = new TreeNode();
|
||||
// LinkedList<TreeNode> treeNodes = linkedLists.get(0);
|
||||
// for (TreeNode treeNode : treeNodes) {
|
||||
// if (linkedLists.get(1).contains(treeNode)) {
|
||||
// node = treeNode;
|
||||
// }
|
||||
// }
|
||||
dfs(root, p, q);
|
||||
TreeNode node=new TreeNode();
|
||||
LinkedList<TreeNode> treeNodes = linkedLists.get(0);
|
||||
for (TreeNode treeNode : treeNodes) {
|
||||
if(linkedLists.get(1).contains(treeNode)){
|
||||
node=treeNode;
|
||||
}
|
||||
}
|
||||
return node;
|
||||
return this.res;
|
||||
}
|
||||
|
||||
private void dfs(TreeNode root, TreeNode p, TreeNode q) {
|
||||
if (root == null) return;
|
||||
list.add(root);
|
||||
map.put(root.val, root);
|
||||
if (root==p||root==q){
|
||||
LinkedList<TreeNode> copyList = new LinkedList<>(list);
|
||||
linkedLists.add(copyList);
|
||||
// private void dfs(TreeNode root, TreeNode p, TreeNode q) {
|
||||
// if (root == null) return;
|
||||
// list.add(root);
|
||||
// map.put(root.val, root);
|
||||
// if (root==p||root==q){
|
||||
// LinkedList<TreeNode> copyList = new LinkedList<>(list);
|
||||
// linkedLists.add(copyList);
|
||||
// }
|
||||
// dfs(root.left, p, q);
|
||||
// dfs(root.right, p, q);
|
||||
// list.pollLast();
|
||||
// }
|
||||
|
||||
private boolean dfs(TreeNode root, TreeNode p, TreeNode q) {
|
||||
if (root == null) {
|
||||
return false;
|
||||
}
|
||||
dfs(root.left, p, q);
|
||||
dfs(root.right, p, q);
|
||||
list.pollLast();
|
||||
boolean left = dfs(root.left, p, q);
|
||||
boolean right = dfs(root.right, p, q);
|
||||
if ((left && right) || ((left || right) && (root.val == p.val || root.val == q.val))) {
|
||||
this.res = root;
|
||||
}
|
||||
return root.val == p.val || root.val == q.val || left || right;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue