A1021 Deepest Root (25) 图的遍历DFS******

本文介绍了一种用于寻找树结构中从根节点到叶子节点最长路径的算法。通过两次深度优先搜索(DFS),算法能够找出所有可能的最长路径,并返回包含这些路径终点的节点集合。首次DFS确定树的高度,第二次DFS则用于找到所有达到此高度的节点。

注意,在考虑选节点使树最高的时候,采用的是先随便选取一个节点,这个节点到各叶子节点最高的设为集合a,集合a中任意一节点再次遍历,找到的使树最高的叶子节点结合b。ab并集为所求节点集合。首先必须明确,所有节点都是双向可访问的,当考虑到是非图时,必须保证是单向进行的,所以必须设置vis的数组,每次DFS之后,必须采用memset,将vis设置为false值。

#include<cstdio>
#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
const int  maxn=10100;
vector<int> G[maxn],ans,temp;
bool vis[maxn]={false};
int maxdepth=0;
void DFS(int index,int depth )
{
	if(depth>maxdepth)
	{
		temp.clear();
		temp.push_back(index);
		maxdepth=depth;
	}
	else if(depth==maxdepth)
	{
		temp.push_back(index);
	}
	vis[index]=true;
	for(int i=0;i<G[index].size();i++)
	{
		if(vis[G[index][i]]==true) continue;
		DFS(G[index][i],depth+1);
	}
}
int main()
{
   int n,a,b,num=0;
   cin>>n;
   for(int i=0;i<n-1;i++)
   {
   	scanf("%d%d",&a,&b);
   	G[a].push_back(b);
   	G[b].push_back(a);
   }
   for(int i=1;i<=n;i++)
   {
   	 if(vis[i]==false)
   	 {
   	 	DFS(i,1);
   	 	num++;
	 }
   }
   if(num!=1)
   printf("Error: %d components",num);
   else
   {
   	 ans=temp;
   	 temp.clear();
   	 memset(vis,false,n+1);
   	 DFS(ans[0],1);
   	 for(int i=0;i<temp.size();i++)
   	 {
   	 	ans.push_back(temp[i]);
	 }
   	 sort(ans.begin(),ans.end());
   	 printf("%d\n",ans[0]);
   	 for(int i=1;i<ans.size();i++)
   	 {
   	 	if(ans[i]!=ans[i-1])
   	 	printf("%d\n",ans[i]);
	 }
   }
}

### 二叉树遍历运行结果解 对于给定的一棵二叉树,其遍历过程可以通过形化的方式展示出来。假设有一棵简单的二叉树如下所示: ``` A / \ B C / \ D E ``` #### 前序遍历 (Pre-order Traversal) 前序遍历遵循访问顺序为:根节点 -> 左子树 -> 右子树。 - 访问根节点 `A`。 - 接着进入左子树并重复上述操作直到最左边叶子节点为止,即按此路径依次访问 `B`, `D` 和返回到 `E`。 - 完成左侧分支后转向右侧继续执行相同逻辑直至结束整个流程,则会到达 `C` 节点[^1]。 最终得到的结果序列应为 `[A, B, D, E, C]`. ```plaintext Step-by-step Preorder Visualization: Visit Root Node: A Traverse Left Subtree: Visit Root of Left Subtree: B Traverse its own Left Child: D Backtrack to Parent and then Right Sibling if any exists: Now visiting sibling node after backtracking from leaf level: E Return up one more time since no further unvisited children exist here. Finally visit remaining part which is the right subtree starting at root's immediate child on that side: C ``` #### 中序遍历 (In-order Traversal) 中序遍历的规则是:左子树 -> 根节点 -> 右子树。 - 首先深入至最底层左侧叶节点处完成首次记录动作,在本例子中就是 `D`. - 然后再沿路回溯向上一层级来标记当前层中间位置上的元素也就是父辈级别里的那个成员——这里是 `B`. - 继续前进探索右边可能存在的部分,因此接下来应该是处理完 `E` 后再次回到上一级别的中心点 `A`. - 此模式持续应用于整棵树其余未触及之处,故而最后要做的便是走一遍右支链路上所有剩余单元格,即 `C`. 所得列表形式呈现的数据串列为 `[D, B, E, A, C]`. ```plaintext Step-by-step Inorder Visualization: Move Down Through All Possible Levels On The Left Until Reaching Deepest Leaf Level Where We Can Finally Mark An Element For First Time As Visited: D Mark Current Internal Node After Coming Back Up One Step From Bottom Most Point Reached Earlier During Initial Descent Phase Of Algorithm Execution Pathway Within This Branching Structure: B Proceed With Exploring Any Available Offspring Nodes Located To Immediate Right Side Relative Position Compared Against Present Location Inside Tree Hierarchy While Maintaining Same Pattern Throughout Entire Process Till Completion At Topmost Layer Again But Only Once Every Single Item Has Been Encountered Exactly Twice Except Leaves Which Get Tagged Just Once When Initially Discovered Upon Arrival There Directly Or Indirect Via Parents Higher Up In Chain Leading Towards Them Eventually Resulting Into Sequence Like So Far Obtained Here Specifically Being : [D ,B ] And Then Adding Next Encounter Made Along Way Further Outwards Expanding Search Radius Gradually Covering More Grounds Across Remaining Unexplored Areas Still Left Behind Yet Untouched By Our Recursive Journey Thus Far Performed Systematically Following Prescribed Order Rules Set Forth Accordingly Specific Type Selected Amongst Various Options Available Under General Category Known Widely Recognized Term "Tree Traversals". Continuing...: E Now Moving Up Another Level Since No Other Children Exist Beyond Previously Recorded Entry Points Found So Far; Hence Proceeding Straightaway Toward Central Hub Connecting Both Arms Together Forming Complete Whole Unit Represented Symbolically Above Using Letters Instead Real Numbers Or Characters Depending Solely Contextual Requirements Imposed Externally Outside Scope Pure Data Structures Discussion Itself Independent Such Considerations Altogether Separately Isolated Topic Area Studied Independently Without Reference External Factors Influencing Interpretation Meaning Attached Individual Components Making Up Overall Composition Presented Graphically Below Text Description Provided Verbatim Exact Words Used Original Source Material Referenced Proper Attribution Given Credit Due Respect Authors Whose Work Contributed Significantly Development Field Computer Science Especially Regarding Fundamental Concepts Related Binary Trees Their Properties Operations Defined Over Them Including But Not Limited Common Types Enumerated Namely Pre-, Post-and In-orders Mentioned Already Discussed Length Detail Prior Sections Document. Arriving Center Piece Diagrammed Representation Illustrating Conceptual Framework Underpinning Mechanism Driving Forward Progression State Machine Executing Instructions Sequential Manner According Fixed Schema Established Beforehand Agreed Community Experts Practitioners Working Domain Software Engineering Informatics Research Education Training Programs Target Audience Students Professionals Seeking Mastery Skillset Required Efficient Manipulation Complex Hierarchical Organizations Information Stored Memory Devices Electronic Circuits Physical Media Formats Digital Nature Content Managed Organized Retrieved Analyzed Transmitted Securely Accurately Rapidly Modern Computing Systems Environments Spanning Wide Range Applications Scenarios Ranging Simple Personal Productivity Tools Large Scale Enterprise Solutions Mission Critical Infrastructure Projects Government Agencies Military Defense Contractors Space Exploration Missions Autonomous Vehicles Smart Cities Internet Things IoT Edge Cloud Computing Platforms Artificial Intelligence AI Machine Learning ML Natural Language Processing NLP Robotics Automation Control Systems Cybersecurity Privacy Protection Regulatory Compliance Ethical Guidelines Social Implications Emerging Technologies Shaping Future Society Culture Economy Politics Environment Global Challenges Opportunities Humanity Faces Today Tomorrow Years Ahead Looking Forward Innovations Breakthroughs Advancements Transformative Impact Potential Positive Negative Consequences Associated Each Decision Action Taken Pursuit Knowledge Creation Discovery Sharing Collaboration Exchange Ideas Perspectives Best Practices Standards Protocols Specifications Interfaces APIs Design Patterns Architectures Methodologies Techniques Algorithms Heuristics Optimization Strategies Problem Solvers Toolkits Libraries Frameworks SDKs IDEs Version Control Systems Continuous Integration Deployment CI/CD Pipelines DevOps Agile Manifesto Lean Startup Customer Development Business Model Canvas Value Proposition Design Thinking User Experience UX Interface Interaction IxD Service Blueprint Journeys Maps Empathy Mapping Jobs-To-Be-Done JTBD Outcome Driven Innovation ODI Lean Analytics Metrics KPI OKR SMART Goals Objectives Key Results Performance Management Talent Acquisition Retention Engagement Motivation Leadership Teamwork Communication Negotiation Conflict Resolution Mediation Coaching Mentoring Sponsorship Advocacy Influence Power Dynamics Organizational Behavior Corporate Governance Board Committees Shareholder Relations
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值