# 有序链表转换二叉搜索树

0
/ \
-3 9
/ /
-10 5

## Java代码参考

public class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
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 {
return null;
}
private TreeNode helper(ListNode start, ListNode end) {
if (start == end)
return null;
ListNode slow = start;
ListNode fast = start;
while (fast != end && fast.next != end) {
slow = slow.next;
fast = fast.next.next;
}
TreeNode root = new TreeNode(slow.val);
root.left = helper(start, slow);
root.right = helper(slow.next, end);
return root;
}
}


# 从中序与后序遍历序列构造二叉树

3
/ \
9 20
/ \
15 7

## Java代码参考

public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
class Solution {
public TreeNode buildTree(int[] inorder, int[] postorder) {
return helper(inorder, postorder, postorder.length - 1, 0, inorder.length - 1);
}
public TreeNode helper(int[] inorder, int[] postorder, int postEnd, int inStart, int inEnd) {
if (inStart > inEnd) {
return null;
}
int currentVal = postorder[postEnd];
TreeNode current = new TreeNode(currentVal);
int inIndex = 0;
for (int i = inStart; i <= inEnd; i++) {
if (inorder[i] == currentVal) {
inIndex = i;
}
}
TreeNode left = helper(inorder, postorder, postEnd - (inEnd - inIndex) - 1, inStart, inIndex - 1);
TreeNode right = helper(inorder, postorder, postEnd - 1, inIndex + 1, inEnd);
current.left = left;
current.right = right;
return current;
}
}

# 移除元素

// nums 是以“引用”方式传递的。也就是说，不对实参作任何拷贝
int len = removeElement(nums, val);

// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i = 0; i < len; i++) {
print(nums[i]);
}

0 <= nums.length <= 100
0 <= nums[i] <= 50
0 <= val <= 100

## Java代码参考

class Solution {
public int removeElement(int[] nums, int val) {
int len = nums.length;
for (int i = 0; i < len;) {
if (nums[i] == val) {
nums[i] = nums[len - 1];
len--;
} else {
i++;
}
}
return len;
}
}

|
4天前
|
Python
【Leetcode刷题Python】114. 二叉树展开为链表
LeetCode上114号问题"二叉树展开为链表"的Python实现，通过先序遍历二叉树并调整节点的左右指针，将二叉树转换为先序遍历顺序的单链表。
12 3
|
1天前
|
Java 容器
07 Java数组与数组操作（定义+遍历+排序+增删改查）（上）
07 Java数组与数组操作（定义+遍历+排序+增删改查）
25 8
|
1天前
|

07 Java数组与数组操作（定义+遍历+排序+增删改查）（下）
07 Java数组与数组操作（定义+遍历+排序+增删改查）
22 4
|
12天前
|

java使用递归及迭代方式实现前序遍历 中序遍历 后序遍历 以及实现层序遍历
java使用递归及迭代方式实现前序遍历 中序遍历 后序遍历 以及实现层序遍历
28 7
|
1天前
|

LeetCode经典算法题：二叉树遍历（递归遍历+迭代遍历+层序遍历）以及线索二叉树java详解
LeetCode经典算法题：二叉树遍历（递归遍历+迭代遍历+层序遍历）以及线索二叉树java详解
5 0
|
1月前
|

14 4
|
1月前
|

2024年最新1000个Java毕业设计选题参考
2024年最新1000个Java毕业设计选题参考
40 0
|
2月前
|
Java API 存储
java中Map遍历详解
java中Map遍历详解
29 0
|
2月前
|
Java

16 0
|
2月前
|

LeetCode力扣第114题：多种算法实现 将二叉树展开为链表
LeetCode力扣第114题：多种算法实现 将二叉树展开为链表
25 0