Last updated on 2023年9月30日 下午
108. 将有序数组转换为二叉搜索树(Java递归实现)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| /** * 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 { public TreeNode digui(int [] nums, int left, int right){ if(left > right){ return null; }
int mid = left + (right - left) / 2; TreeNode node = new TreeNode(nums[mid]);
//单层递归逻辑 //接受左子树结点 node.left = digui(nums, left, mid - 1); //接受右子树结点 node.right = digui(nums, mid + 1, right);
return node; }
public TreeNode sortedArrayToBST(int[] nums) { //思路:使用递归方法 TreeNode resultNode = digui(nums, 0, nums.length - 1); return resultNode; } }
|
108. 将有序数组转换为二叉搜索树(Java使用迭代实现)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
class Solution { public TreeNode sortedArrayToBST(int[] nums) { Queue<TreeNode> nodeQue = new LinkedList<>(); Queue<Integer> leftQue = new LinkedList<>(); Queue<Integer> rightQue = new LinkedList<>();
TreeNode root = new TreeNode(0); nodeQue.offer(root);
leftQue.offer(0);
rightQue.offer(nums.length - 1);
while(!nodeQue.isEmpty()){ TreeNode currNode = nodeQue.poll(); int left = leftQue.poll(); int right = rightQue.poll();
int mid = left + (right - left) / 2;
currNode.val = nums[mid];
if(left <= mid - 1){ currNode.left = new TreeNode(0); nodeQue.offer(currNode.left); leftQue.offer(left); rightQue.offer(mid - 1); }
if(right >= mid + 1){ currNode.right = new TreeNode(0); nodeQue.offer(currNode.right); leftQue.offer(mid + 1); rightQue.offer(right); } }
return root; } }
|
98. 验证二叉搜索树(Java递归迭代遍历树结点,然后使用for循环遍历保存结点的数组检查是否升序排列即可)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| /** * 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 { List<TreeNode> keep = new ArrayList<>();
public void digui(TreeNode root){ if(root == null){ return; }
digui(root.left); keep.add(root); digui(root.right); return ; } public boolean checkIsSouTree(List<TreeNode> keep){ for(int i = 1;i < keep.size();i++){ if(keep.get(i).val <= keep.get(i - 1).val){ return false; } }
return true;
}
public boolean isValidBST(TreeNode root) { digui(root);
return checkIsSouTree(keep);
} }
|
230. 二叉搜索树中第K小的元素(Java递归实现)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
class Solution { List<Integer> keep = new ArrayList<>();
public void TraverseTree(TreeNode root){ if(root == null){ return ; }
TraverseTree(root.left); keep.add(root.val); TraverseTree(root.right);
return ; }
public int kthSmallest(TreeNode root, int k) { TraverseTree(root);
return keep.get(k - 1); } }
|
199. 二叉树的右视图(Java使用队列实现)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| /** * 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 { public List<Integer> rightSideView(TreeNode root) { List<Integer> result = new ArrayList<>();
if(root == null){ return result; } Queue<TreeNode> nodeQue = new LinkedList<>(); nodeQue.offer(root);
while(!nodeQue.isEmpty()){ int length = nodeQue.size(); TreeNode currLastNode = new TreeNode(0);
for(int i = 0;i < length;i++){ TreeNode node = nodeQue.poll(); currLastNode = node;
if(node.left != null){ nodeQue.offer(node.left); }
if(node.right != null){ nodeQue.offer(node.right); } }
result.add(currLastNode.val); }
return result; } }
|
114. 二叉树展开为链表(Java使用递归遍历,然后使用两个指针进行操作)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| /** * 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 { List<TreeNode> keep = new ArrayList<>();
public void digui(TreeNode root){ if(root == null){ return ; } keep.add(root); digui(root.left); digui(root.right);
return ; }
public void flatten(TreeNode root) { digui(root);
for(int i = 1;i < keep.size();i++){ TreeNode prev = keep.get(i - 1); TreeNode curr = keep.get(i);
prev.left = null; prev.right = curr; } } }
|
105. 从前序与中序遍历序列构造二叉树(Java实现)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { int preLength = preorder.length; int inLength = inorder.length;
if(preLength == 0 || inLength == 0){ return null; }
TreeNode root = new TreeNode(preorder[0]);
int k = 0; for(int i = 0;i < inLength;i++){ if(preorder[0] == inorder[i]){ k = i; break; } }
int [] leftPreorder = Arrays.copyOfRange(preorder, 1, k + 1); int [] leftInorder = Arrays.copyOfRange(inorder, 0, k); root.left = buildTree(leftPreorder, leftInorder);
int [] rightPreorder = Arrays.copyOfRange(preorder, k + 1, preLength); int [] rightInorder = Arrays.copyOfRange(inorder, k + 1, inLength); root.right = buildTree(rightPreorder, rightInorder);
return root; } }
|
leetcode-hot-100-20230930
https://thewangyang.github.io/2023/09/30/leetcode-hot-100-20230930/