剑指offer计划15( 搜索与回溯算法中等)---java

Posted URMkhaos的技术分享博客-Golang技术分享-Pyt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer计划15( 搜索与回溯算法中等)---java相关的知识,希望对你有一定的参考价值。

1.1、题目1

剑指 Offer 54. 二叉搜索树的第k大节点

1.2、解法

res和k设为全局变量,然后开始遍历二叉搜索树,
因为是二叉搜索树,所以从右结点开始遍历,
每次遍历就判断是否到达结点。
每个结点就-k,知道到达结点。

1.3、代码

class Solution {
    int res,k;
    public int kthLargest(TreeNode root, int k) {
        this.k=k;
        dfs(root);
        return res;
    }   

    public void dfs(TreeNode root){
        if(root==null) return ;
        dfs(root.right);
        if(k==0) return;
        if(--k==0) res=root.val;
        dfs(root.left);
    }
}

2.1、题目2

剑指 Offer 36. 二叉搜索树与双向链表

2.2、解法

深度优先搜索,,通过前后结点开始赋值,
搜索时,中序遍历,如果该结点不为空,
则pre结点的right为当前结点,该节点的left为pre
然后pre结点变为当前节点,到下一个结点继续遍历

2.3、代码

class Solution {
    Node pre, head;
    public Node treeToDoublyList(Node root) {
        if(root == null) return null;
        dfs(root);
        head.left = pre;
        pre.right = head;
        return head;
    }
    void dfs(Node cur) {
        if(cur == null) return;
        dfs(cur.left);
        if(pre != null) pre.right = cur;
        else head = cur;
        cur.left = pre;
        pre = cur;
        dfs(cur.right);
    }
}


3.1、题目3

剑指 Offer 34. 二叉树中和为某一值的路径

3.2、解法

这里有点像回溯加减枝的感觉
如果到达叶子结点,并且路线结点值加起来是target值就添加入List中

这里结束要将添加的值删除掉,从而进入下个阶段。

3.3、代码

class Solution {
    LinkedList<List<Integer>> res = new LinkedList<>();
    LinkedList<Integer> path = new LinkedList<>(); 
    public List<List<Integer>> pathSum(TreeNode root, int sum) {
        recur(root, sum);
        return res;
    }
    void recur(TreeNode root, int tar) {
        if(root == null) return;
        path.add(root.val);
        tar -= root.val;
        if(tar == 0 && root.left == null && root.right == null)
            res.add(new LinkedList(path));
        recur(root.left, tar);
        recur(root.right, tar);
        path.removeLast();
    }
}

以上是关于剑指offer计划15( 搜索与回溯算法中等)---java的主要内容,如果未能解决你的问题,请参考以下文章

乱序版 ● 剑指offer每日算法题打卡题解—— 搜索与回溯算法(题号 40,45,61)

乱序版 ● 剑指offer每日算法题打卡题解—— 搜索与回溯算法(题号12,13,34)

乱序版 ● 剑指offer每日算法题打卡题解——搜索与回溯算法(题号37,38)

乱序版 ● 剑指offer每日算法题打卡题解—— 搜索与回溯算法 (题号26,27, 28)

⭐算法入门⭐《二叉树 - 二叉搜索树》中等01 —— LeetCode 剑指 Offer 33. 二叉搜索树的后序遍历序列

⭐算法入门⭐《二叉树 - 二叉搜索树》中等02 —— LeetCode 剑指 Offer 33. 二叉搜索树的后序遍历序列