递归 迭代 得到家谱树 子孙树

2024-06-23 22:32

本文主要是介绍递归 迭代 得到家谱树 子孙树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

<?php $arr=array(array('id'=>'1','name'=>'吉林','parent'=>0),array('id'=>'2','name'=>'北京','parent'=>0),array('id'=>'3','name'=>'辽宁','parent'=>0),array('id'=>'4','name'=>'吉林市','parent'=>1),array('id'=>'5','name'=>'长春','parent'=>1),array('id'=>'6','name'=>'海淀','parent'=>2),array('id'=>'7','name'=>'大连','parent'=>3),array('id'=>'8','name'=>'船营区','parent'=>4),array('id'=>'9','name'=>'丰满区','parent'=>4));//找子栏目function findson($arr,$id=0){$sons=array();foreach($arr as $v){if($v['parent']==$id){$sons[]=$v;}}return $sons;}//var_dump(findson($arr,$id=1));//找子孙树//用静态变量function subtree($arr,$id,$lev=1){static $subs=array();  //static 只初始化一次foreach($arr as $v){if($v['parent']==$id){$v['lev']=$lev;$subs[]=$v;subtree($arr,$v['id'],$lev+1);//不用静态变量// $subs=array_merge($subs,subtree($arr,$v['id'],$lev+1));}}return $subs;}/*$tree=subtree($arr,$id=0,1);foreach ($tree as $v){echo str_repeat('  ',$v['lev']).$v['name']."<br/>";}*//**家谱树应用面包屑导航首页>手机类型>诺基亚>**/function familytree($area,$id){static $tree=array();foreach($area as $v){if($v['id']==$id){$tree[]=$v;//判断要不要继续找父栏目if($v['parent']>0){familytree($area,$v['parent']);//不用static//array_merge($area,familytree($area,$v['parent']));}}}return $tree;}echo "<hr>";
//print_r(familytree($arr,9));
/*用迭代找家谱树(推荐)*/
function familytree2($arr,$id){$tree=array();while($id!==0){foreach($arr as $v){if($v['id']==$id){$tree[]=$v;	$id=$v['parent'];	break;				}}}return $tree;
}print_r(familytree2($arr,9));
?>

这篇关于递归 迭代 得到家谱树 子孙树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088462

相关文章

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

直接得到Json串,转换为字典

0.新创建一个json文件,把json串拷贝到里面 1.先通过MainBundle找到资源对应的路径 2.将文件转换为NSData 3.通过NSJSonSerization得到字典 NSString*fileName=[[NSBundle mainBundle] pathForResource:@"myJson" ofType:@"json"];           NS

C++ 重建二叉树(递归方法)

/*** struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* };*/#include <vector>class Solution {public:/*** 代码

大学生自救数据结构与算法(py实现)——01递归

目录 目录 递归 基本概念 工作原理 基本要素 优点 缺点 实现技巧 实例解析:计算阶乘 斐波那契数列 高效的斐波那契数列 python中的最大递归深度 二分查找 基本原理 性能分析 优化与变体 线性递归  元素序列的递归求和 二路递归 二路递归的基本概念 典型应用 工作原理 多重递归  示例:计算卡特兰数(Catalan Number) 尾递

STL迭代器的基础应用

STL迭代器的应用 迭代器的定义方法: 类型作用定义方式正向迭代器正序遍历STL容器容器类名::iterator 迭代器名常量正向迭代器以只读方式正序遍历STL容器容器类名::const_iterator 迭代器名反向迭代器逆序遍历STL容器容器类名::reverse_iterator 迭代器名常量反向迭代器以只读方式逆序遍历STL容器容器类名::const_reverse_iterato

对递归执行过程的简单描述

1. 分析代码 #include <stdio.h>void fun(int n){printf("1th - Level: %d Address: %d\n", n, &n);if(n < 3)fun(n+1);printf("2th - Level: %d Address: %d\n", n, &n);}int main(){fun(1);return 0;} 输出结果为:

vue+elementui搭建后台管理界面(5递归生成侧栏路由) vue定义定义多级路由菜单

有一个菜单树,顶层菜单下面有多个子菜单,子菜单下还有子菜单。。。 这时候就要用递归处理 1 定义多级菜单 修改 src/router/index.js 的 / 路由 {path: '/',redirect: '/dashboard',name: 'Container',component: Container,children: [{path: 'dashboard', name: '首

汉诺塔问题的java递归实现

import java.util.Scanner;public class Hanoi {int count=0;public void hanoi(int n,char A,char B,char C){ //把n个盘子移动到ccount++;if(n==1){System.out.println("盘子1从"+A+"移动到"+C); //再把最下边那个最大的盘子移到目标柱c上}el

二叉树的先序创建,先序,中序,后序的递归与非递归遍历,层次遍历,叶子结点数及树的深度

二叉树的先序创建,先序,中序,后序的递归与非递归遍历,层次遍历,叶子结点数及树的深度计算 输入格式:如   abd###ce##f##*   package tree;//二叉树的二叉链表实现import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;import java.util.Sta

java的单例集合迭代器

迭代器Iterator         根据之前的介绍我们知道,单例集合是由接口Collection定义的容器。Collection接口之下由定义了List接口和Set接口,其中List接口定义的容器的特征是有序可重复,而Set接口定义的容器的特征是无序不可重复的。         List接口定义的容器的底层是通过数组来实现的,它的每一个容器中的元素都具有属于自己的索引,因此可以定义重复的元