2024/9/2 Hot100 binaryTree 昨日公共节点第二种解法

This commit is contained in:
linlihong 2024-09-03 09:35:48 +08:00
parent 2a72ebc5eb
commit 8fc3fadc94
1 changed files with 38 additions and 22 deletions

View File

@ -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;
}
}