首页 > 其他分享 >递归-回溯2

递归-回溯2

时间:2023-04-08 22:45:33浏览次数:39  
标签:node right val 递归 回溯 null public left

namespace JD;
 

public class JDTest{
    public static void Show()
    {
        int[] arr = {1,2,3,4,5,6,7};
        var root = BuildTree2(arr,0,arr.Length-1);
        var stack = new Stack<int>();
        var rtList = new List<int>();
        Get21Method(root,rtList,root.val);
        foreach(var item in rtList) Console.WriteLine(item);

        IList<List<int>> rt = new List<List<int>>();
        FindPath(root, rt, stack);
        foreach (var item in rt) Console.WriteLine(string.Join("-", item));
        Console.WriteLine(11);
    }

    // 回溯法求完整路径是21的公约数的路径 不需要return;
    public static void Get21Method(TreeNode node,IList<int> rsList,int sum)
    {
        // if(node == null) return;
        if(node.left == null && node.right == null && sum == 15)
        {
            rsList.Add(node.val);
        }
        if(node.left != null) Get21Method(node.left,rsList,sum+node.left.val);
        if(node.right != null) Get21Method(node.right,rsList,sum+node.right.val);
    }

    public static void FindPath(TreeNode node, IList<List<int>> rsList, Stack<int> stack)
    {
        stack.Push(node.val);
        if (node.left == null && node.right == null && 21 % node.val == 0)
        {
            rsList.Add(stack.Reverse().ToList());
        }
        if (node.left != null) FindPath(node.left, rsList, stack);
        if (node.right != null) FindPath(node.right, rsList, stack);
        stack.Pop();
    }

    public static TreeNode BuildTree2(int[] arr, int left, int right)
    {
        if (left > right) return null;
        int mid = left + (right - left) / 2;
        var root = new TreeNode(arr[mid]);
        root.left = BuildTree2(arr, left, mid - 1);
        root.right = BuildTree2(arr, mid + 1, right);
        return root;
    }
}

public class TreeNode
{
    public int val;
    public TreeNode left;
    public TreeNode right;
    public TreeNode(int val = 0, TreeNode left = null, TreeNode right = null)
    {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}
5
4-2-1
4-2-3
4-6-7

其实了解了递归序,对回溯就有了很好的理解。

标签:node,right,val,递归,回溯,null,public,left
From: https://www.cnblogs.com/Insist-Y/p/17299451.html

相关文章

  • 理解回溯算法——从全排列问题开始
    一、简介回溯法(backtracking)是优先搜索的一种特殊情况,又称为试探法,常用于需要记录节点状态的深度优先搜索。通常来说,排列、组合、选择类问题使用回溯法比较方便。 二、从全排列问题开始理解回溯算法以数组[1,2,3]的全排列为例。先写以1开头的全排列,它们是:[1,2,3],[1,......
  • HJ67_24点游戏算法_多维递归_DFS(深度优先搜索)
    思路:多维递归,深度有限遍历加减乘除四种情况。知识点:1、多维递归不能对传递的变量进行修改,否则无法回溯。应该传递一个新地址的变量,如代码所示,传递切片的列表,不修改列表  2、搜索遗漏。两括号比如((9-4)-1)*6选取任意一个数作为第一个运算数与24运算,不能找出所有24点的计算......
  • HJ71_字符串通配符_多维递归
    思路:1、对比字符最后一个,对比字符倒数第二个,一致对比到最后一个,如此递归。2、该题符合多维递归,回溯判断。遇到“*”通配符时,列举三种不同参数传递的递归情况,分叉递归以达到穷举的效果。(回溯)3、结束条件:两字符串均为空,不计算“*”字符具体,如代码所示。#*只能匹配数字或字母0个......
  • HJ77_火车进站_栈_递归_递归可视化
    思路:多维递归模拟进站出站,递归回溯,使用全局变量收集结果,最后输出结果。语言知识:1、关于参数传入和可变变量修改 2、错误使用return  3、进出站不同跟踪方法。cursor只是表示等待进站火车下标。   递归可视化:     程序:1importsys2a=sys.stdi......
  • 递归-回溯
    Stack<int>stack=newStack<int>();inttemp=0;HS(92);voidHS(inti){if(i==100)return;stack.Push(i);Console.WriteLine($"回溯前i:{i}");HS(i+1);temp=stack.Pop();Console.WriteLine($"回溯后i:{temp......
  • 颜色分类(数组、双指针)、排列序列(递归、数学)、合并区间(数组、排序)
    颜色分类(数组、双指针)给定一个包含红色、白色和蓝色,一共n__个元素的数组,**原地(https://baike.baidu.com/item/%E5%8E%9F%E5%9C%B0%E7%AE%97%E6%B3%95)**对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数0、1和2分别表示红色、......
  • UVA - 129 Krypton Factor 回溯+剪枝
    题目大意:给出N种字母,要求用这N种字母组成一个困难的串,困难的串指在串中没有相连的两个子串相同,要求输出第M个困难的串解题思路:像八皇后一样,前面判断的就不需要再去判断了,直接往后判断即可#include<cstdio>#include<cstring>intn,L;intans[100];boolflag;intcnt;boolju......
  • 汉诺塔递归
    法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的n片金片。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只......
  • 递归汉诺塔
    题目描述法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的n片金片。不论白天黑夜,总有一个僧侣在按照下面的法则移动这......
  • 两两交换节点位置:递归法、迭代法和数组转换法
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=......