IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> [php]递归和迭代两种方法实现 2021.07.24 -> 正文阅读

[PHP知识库][php]递归和迭代两种方法实现 2021.07.24

1.题目:

?2.解答

1)递归算法:
--思路: 比较左子树中的值比根节点的值不小,或 右子树中的值比根节点中的值不大,则返回 false
--代码实现

$this->doCheck($root, PHP_INT_MIN, PHP_INT_MAX);
?/**
? ? * 递归(recursion)的解决方案
? ? * php中最小数值和最大数值怎么表示?PHP_INT_MAXPHP_INT_MIN
? ? ?*/
? ? function doCheck($root, $lowVal, $highVal) {
? ? ? ? if($root === null){
? ? ? ? ? ? return true;
? ? ? ? }

? ? ? ? // 适当的调试,帮助理解和编码
? ? ? ? //var_dump("01", $root->val, $lowVal, $highVal, "\n\n");

? ? ? ? // 一定注意判断下 $lowVal 和 $highVal 为 null的情况
? ? ? ? if(($root->val <= $lowVal)
? ? ? ? || ($root->val >= $highVal)){
? ? ? ? ? ? return false;
? ? ? ? }

? ? ? ? // 注意是取 逻辑的与
? ? ? ? return $this->doCheck($root->left, $lowVal, $root->val)
? ? ? ? ?&& $this->doCheck($root->right, $root->val, $highVal);
? ? }


-- 注意点:
① php的最小值,最大值分别为 PHP_INT_MIN 和 PHP_INT_MAX
② php是弱语言,里边的 null == 0 会返回 true
③ 最后的 返回表达式里,上下边界的取值
return this->doCheck(this?>doCheck(root->left, $lowVal, $root->val)
&& this->doCheck(this?>doCheck(root->right, $root->val, $highVal);

2)迭代算法
--思路: 使用二叉树的中序遍历,因为是 二叉搜索树,中序遍历的结果应该是一个 升序序列。
-- 代码实现:

/**
? ? * 迭代(iteration)的解决方案: 中序遍历
? ? */
? ? function dieDaiCheck($root){
? ? ? ? if($root === null){
? ? ? ? ? ? return true;
? ? ? ? }

? ? ? ? // 栈数组
? ? ? ? $stack = array();
? ? ? ? $inOrder = null;
? ? ? ? // test?
? ? ? ? $loop = 0;
? ? ? ? while(!empty($stack) || $root != null){
? ? ? ? ? ? // test?
? ? ? ? ? ? $loop ++;
? ? ? ? ? ? while($root !== null){
? ? ? ? ? ? ? ? // 这里放置的是一个对象
? ? ? ? ? ? ? ? $stack[] = $root;
? ? ? ? ? ? ? ? $root = $root->left;
? ? ? ? ? ? }

? ? ? ? ? ? // 出栈
? ? ? ? ? ? $root = array_pop($stack);

? ? ? ? ? ? // 注意php是弱语言, 0 == null 会返回真
? ? ? ? ? ? if($inOrder !== null && $root->val <= $inOrder){
? ? ? ? ? ? ? ? return false;
? ? ? ? ? ? }

? ? ? ? ? ? $inOrder = $root->val;
? ? ? ? ? ? $root = $root->right;

? ? ? ? }

? ? ? ? return true;
? ? }

-- 注意点:
① 中序遍历的迭代算法中,使用数据结构 stack来实现,java中建议是 DeQueue,不建议已经过时的 Stack, php中数组表达一切,只是注意 array_pop代表弹栈操作
②php弱语言的性质还要注意
③ 二叉树中序遍历的模板注意背诵,左 * 右

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 11:26:31  更:2021-07-25 11:27:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 1:36:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码