二叉搜索樹中的兩個節點被錯誤地交換。請在不改變其結構的情況下,恢復這棵樹。示例 1:輸入: [1,3,null,null,2]1/3\2輸出: [3,1,null,null,2]3/1\2
代碼
/*** 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 {PriorityQueue<Integer> treeNodes=new PriorityQueue<>();public void recoverTree(TreeNode root) {mid(root);midd(root);}public void midd(TreeNode root) {//中序遍歷,將優先隊列中生成正確的順序裝回樹上if(root==null) return;midd(root.left);root.val=treeNodes.poll();midd(root.right);}public void mid(TreeNode root) {//中序遍歷,并在優先隊列中生成正確的順序if(root==null) return;mid(root.left);treeNodes.add(root.val);mid(root.right);}
}