230. 二叉搜索树中第 K 小的元素 - 力扣(LeetCode)
相当于把二叉搜索树从小到大排序,而二叉搜索树有一个特点,就是顺序左子树 < 根节点 < 右子树,因此可以考虑使用中序遍历
/*** 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 now = 0;int ans = 0;public int kthSmallest(TreeNode root, int k) {find(root, k);return ans;}public void find(TreeNode root, int k) {if (root == null) {return;}find(root.left, k);if (++now == k) {ans = root.val;return;}find(root.right, k);}}
199. 二叉树的右视图 - 力扣(LeetCode)
按照中 -> 右 -> 左遍历,只要每层记录一下第一个遍历到的节点
/*** 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> ans = new ArrayList<>();find(root, ans, 0);return ans;}public void find(TreeNode root, List<Integer> ans, int now) {if (root == null) {return ;}if (ans.size() <= now) {ans.add(root.val);}find(root.right, ans, now+1);find(root.left, ans, now+1);}}