关于树的一些算法题---持续更新

 

树的定义为:

public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}

1、求一棵树的高度:

    public int height(TreeNode root) {
        if(root == null) return 0;
        return Math.max(height(root.left), height(root.right)) + 1;
    }

2、判断一棵树是否为平衡树:

    public boolean isBalanced(TreeNode root) {
        if(root == null) return true;
        return Math.abs(height(root.left) - height(root.right)) <= 1 && isBalanced(root.left) && isBalanced(root.right);
    }

3、删除二叉搜索树中的某个结点:

public TreeNode deleteNode(TreeNode root, int key) {
    if(root == null){
        return null;
    }

    if(key < root.val) {
        root.left = deleteNode(root.left, key);
    } else if (key > root.val) {
        root.right = deleteNode(root.right, key);
    } else {
        if(root.left == null) {
            return root.right;
        } else if(root.right == null) {
            return root.left;
        }  // 上面两个判断处理了待删除结点是叶子结点或者只有一个孩子结点的情况
        
        // 下面处理待删除结点有两个孩子结点的情况
        TreeNode minNode = findMin(root.right);  // 首先找到右子树中最小的结点
        root.val = minNode.val;                  // 替换该节点,替换后是满足二叉搜索树的性质
        root.right = deleteNode(root.right, root.val); // 删除替换结点
    }
    return root;
}

private TreeNode findMin(TreeNode node){
    while(node.left != null) {
        node = node.left;
    }
    return node;
}

 4、计算二叉树结点的个数:

    public int countNodes(TreeNode root) {
        if(root == null) return 0;
        return 1 + countNodes(root.left) + countNodes(root.right);
    }

 5、将一棵BST中的每个节点值加上所有大于该节点值的值:


                
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习是人工智能的核心,是使计算机具有智能的根本途径。 随着统计学的发展,统计学习在机器学习中占据了重要地位,支持向量机(SVM)、决策和随机森林等算法的提出和发展,使得机器学习能够更好地处理分类、回归和聚类等任务。进入21世纪,深度学习成为机器学习领域的重要突破,采用多层神经网络模型,通过大量数据和强大的计算能力来训练模型,在计算机视觉、自然语言处理和语音识别等领域取得了显著的成果。 机器学习算法在各个领域都有广泛的应用,包括医疗保健、金融、零售和电子商务、智能交通、生产制造等。例如,在医疗领域,机器学习技术可以帮助医生识别医疗影像,辅助诊断疾病,预测病情发展趋势,并为患者提供个性化的治疗方案。在金融领域,机器学习模型可以分析金融数据,识别潜在风险,预测股票市场的走势等。 未来,随着传感器技术和计算能力的提升,机器学习将在自动驾驶、智能家居等领域发挥更大的作用。同时,随着物联网技术的普及,机器学习将助力智能家居设备实现更加智能化和个性化的功能。在工业制造领域,机器学习也将实现广泛应用,如智能制造、工艺优化和质量控制等。 总之,机器学习是一门具有广阔应用前景和深远影响的学科,它将持续推动人工智能技术的发展,为人类社会的进步做出重要贡献。
### 回答1: 学习 C 语言到一定程度后,可以去刷算法。具体来说,需要掌握 C 语言中的基本数据类型、运算符、流程控制语句、函数、数组和指针等基本知识。此外,如果能熟练使用常用的数据结构(如数组、链表、栈和队列等)和算法(如排序和搜索算法),就可以开始做算法了。 ### 回答2: 学习算法和刷算法是程序员技能提升的重要部分,对于一般的学习者来说,能够刷算法的程度与以下几个方面有关。 首先,掌握基础的数据结构和算法是刷算法的前提。这包括数组、链表、栈、队列、、图等数据结构,以及常见的排序和搜索算法、动态规划、贪心算法等。如果没有掌握这些基础知识,刷算法会事倍功半。 其次,需要具备一定的编程能力。刷算法需要用编程语言实现算法的思想,因此熟练掌握编程语言的基本语法和常用的数据结构操作是必要的。同时,编程能力也体现在解过程中的思考能力和代码的实现能力上。 然后,需要有一定的算法思维和解能力。刷算法并不仅仅是实现算法,更重要的是理解算法背后的思想和解思路。需要培养对问的抽象分析能力,能够将问转化为基本的数学模型,并设计出高效的算法来解决问。 最后,需要坚持不懈地练习。刷算法是一个长期的学习过程,需要持续地投入时间和精力。通过刷,可以不断积累经验,提升解能力,掌握更多的算法思想和技巧。 总的来说,能够去刷算法的程度取决于个人的基础知识、编程能力、算法思维和解能力,以及持续的学习和练习。只有不断地充实自己,不断地积累经验,才能在算法中有所收获。 ### 回答3: 学习算法是程序员成长的必经之路。c语言是一门功能强大的编程语言,掌握c语言的基本语法和数据结构后,可以开始学习和刷算法。一般来说,当掌握了以下几个方面的知识,就可以开始刷算法了。 首先是基本的语法和数据结构。掌握c语言的基本语法和常用的数据结构(如数组、链表、堆栈等)是算法的基础。只有熟练掌握了这些基础知识,才能够更好地理解和解决算法。 其次是算法的设计与分析。学习算法的重点是理解不同的算法思想和设计方法,并能将其应用到具体的问中解决。常见的算法思想包括贪心算法、动态规划、回溯算法等。熟悉这些算法思想,并能够灵活运用,是刷算法的关键。 最后是问解决能力。刷算法的过程中,会遇到各种各样的问,有时候会比较复杂或难以理解。在这个过程中,培养问解决能力是至关重要的。要能够善于分析问、寻找解决问的思路,并灵活应用已学过的算法技巧。 刷算法不仅要求学习和理解,更需要大量的练习。最好的学习方法是多刷,通过实践来提升算法思维和解能力。在解的过程中,要注重思考和总结,总结解的思路和遇到的难点,这样才能够不断进步。 总之,学习和刷算法需要一定的时间和毅力,并且需要掌握一定的基础知识和解技巧。只有有了这些,才能够更好地应对算法,进一步提升自己的编程水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值