c语言求二叉树中最大结点的值,求二叉树中节点最大(最小)的值

如题:任给二叉树,求它的节点值最大的那个值?

public int maxTreeNode(TreeNode root) {

if (root.left == null && root.right == null) {

return root.val;

} else {

if (root.left != null && root.right != null) {

return root.val > maxTreeNode(root.left) ? (root.val > maxTreeNode(root.right) ? root.val

: maxTreeNode(root.right))

: (maxTreeNode(root.left) > maxTreeNode(root.right) ? maxTreeNode(root.left)

: maxTreeNode(root.right));

} else if (root.left == null && root.right != null) {

return root.val > maxTreeNode(root.right) ? root.val

: maxTreeNode(root.right);

} else {

return root.val > maxTreeNode(root.left) ? root.val

: maxTreeNode(root.left);

}

}

}说说我第一次的错误想法,在方法中定义max用来保存遍历得到的最大值,结果每次递归时,都等于在重新定义max,这种方法不对,但我又在想难道递归过程中就不能有一个值来保存我们想要得到的值吗?对递归认识还不够,很多二叉树的题用递归方法来解很简单。晚上好好看看这个递归算法。

递归过程中,变量值怎么独立变化?设置一个全局变量。

递归的重新认识

什么叫递归?直接或间接的调用自身叫递归。

递归算法设计就是:把一个大型复杂的问题层层转化成一个与原问题相似的规模较小的问题,在逐步求解小问题后,再返回(回溯)到大问题的解。

关键步骤:1.找出递归关系(递归方程,即问题向边界问题转化的规则)2.递归终止条件(边界条件)

设计递归步骤:

1)分析问题,寻找递归关系:找出大规模问题与小规模问题的关系,这样通过递归使问题规模逐渐变小

2)设置边界,控制递归:找出停止条件,及算法停止的最小规模问题

3)设计函数确定参数

递归和循环:每个迭代算法原则上总可以转换成与它等价递归算法,但并不是每个递归算法都可转换成与之等价的循环迭代算法。(可以问问为什么?)

常见递归算法问题:汉诺塔问题,

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值