wordpress 網(wǎng)銀支付seo專業(yè)培訓(xùn)課程
前言
書接上篇文章二叉樹習(xí)題其四,這篇文章我們將基礎(chǔ)拓展
###我做這類文檔一個(gè)重要的目的還是給正在學(xué)習(xí)的大家提供方向(例如想要掌握基礎(chǔ)用法,該刷哪些題?)我的解析也不會(huì)做的非常詳細(xì),只會(huì)提供思路和一些關(guān)鍵點(diǎn),力扣上的大佬們的題解質(zhì)量是非常非常高滴!!!
習(xí)題
1.二叉樹的最近公共祖先
題目鏈接:236. 二叉樹的最近公共祖先 - 力扣(LeetCode)
題面:
基本分析:如果一個(gè)節(jié)點(diǎn)的左右子樹含有目標(biāo)值,那么這個(gè)節(jié)點(diǎn)就是祖先,如果只有左/右子樹含有,那這個(gè)就不是祖先
代碼:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/
class Solution {TreeNode res;public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {recursion(root,p.val,q.val);return res;}public int recursion(TreeNode node,int a,int b){if(node==null)return 0;int c = node.val==a|node.val==b?1:0;int left = recursion(node.left,a,b);int right = recursion(node.right,a,b);if(c+left+right==2)res = node;return c+left+right==0?0:1;}
}
2.二叉搜索樹中的插入操作
題目鏈接:701. 二叉搜索樹中的插入操作 - 力扣(LeetCode)
題面:
基本分析:根據(jù)二叉搜索樹的規(guī)則一直遍歷到空值然后插入即可?
代碼:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {int res;TreeNode flag;public TreeNode insertIntoBST(TreeNode root, int val) {// System.out.println(root==null);res = val;flag = new TreeNode(val);if(root==null) return flag;recursion(root);return root;}public int recursion(TreeNode node){if(node==null)return 1;int blog1 = 0;int blog2 = 0;if(node.val<res)blog1 = recursion(node.right);if(node.val>res)blog2 = recursion(node.left);if(blog1==1)node.right = flag;else if(blog2==1)node.left = flag;return 0;}
}
?
3.刪除二叉搜索樹中的節(jié)點(diǎn)
題目鏈接:450. 刪除二叉搜索樹中的節(jié)點(diǎn) - 力扣(LeetCode)
題面:
基本分析:如果遍歷到要?jiǎng)h除的節(jié)點(diǎn),分情況的討論,如果左右節(jié)點(diǎn)都是空,就返回null,如果左/右有一個(gè)為空,就返回右/左,如果左右都不為空,則需要將子樹拼接,具體看代碼?
代碼:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {int target;public TreeNode deleteNode(TreeNode root, int key) {target = key;if(root==null)return null;return recursion(root);}public TreeNode recursion(TreeNode node){if(node==null)return null;if(node.val==target){if(node.left==null)return node.right;if(node.right==null)return node.left;TreeNode c = node.left;while(c.right!=null)c = c.right;c.right = node.right;return node.left;}else{if(node.val>target)node.left = recursion(node.left);else node.right = recursion(node.right);}return node;}}
后言
上面是二叉樹的部分習(xí)題,下一篇會(huì)講解二叉樹的其他相關(guān)力扣習(xí)題,希望有所幫助,一同進(jìn)步,共勉!?