前言
###我做這類文章一個重要的目的還是給正在學習的大家提供方向(例如想要掌握基礎用法,該刷哪些題?建議靈神的題單和代碼隨想錄)和記錄自己的學習過程,我的解析也不會做的非常詳細,只會提供思路和一些關鍵點,力扣上的大佬們的題解質量是非常非常高滴!!!
習題
1.反轉二叉樹以匹配先序遍歷
題目鏈接:971. 翻轉二叉樹以匹配先序遍歷 - 力扣(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 {List<Integer> ans = new ArrayList<>();int idx = -1;public List<Integer> flipMatchVoyage(TreeNode root, int[] voyage) {return dfs(root, voyage) ? ans : Arrays.asList(-1);}boolean dfs(TreeNode node, int[] voyage) {// 空節點肯定滿足, 直接返回 trueif (node == null) { return true; }idx++;// 檢查當前節點的值和 voyage 數組對應位置的值是否一致if (node.val != voyage[idx]) { return false; }// 需要進行翻轉的情況if (node.left != null && node.right != null &&node.left.val != voyage[idx+1]) {TreeNode tmp = node.left;node.left = node.right;node.right = tmp;ans.add(node.val);}// 遞歸處理左子樹和右子樹return dfs(node.left, voyage) && dfs(node.right, voyage);}
}
后言
上面是數據結構相關的習題,下一篇文章會將其他相關的習題。?
?
?