二叉树最长路径问题
2017-03-19 19:35
225 查看
已知一颗二叉树其定义如下:
A
| |
| |
| |
B C
| |
| | |
D E F
|
|
G
采用二叉树存储结构,设计一个算法,输出该二叉树第一条最长路径信息。
方法一 采用非递归方式
这里先定义一个结构体:
方法二 递归方式
递归方式是处理二叉树问题的常用方法,容易想到,但是开销较大。由于需要输出路径,故参数需要引入路径数组以便记录。
struct node1{ int val; node1*left; node1*right; };例如:
A
| |
| |
| |
B C
| |
| | |
D E F
|
|
G
采用二叉树存储结构,设计一个算法,输出该二叉树第一条最长路径信息。
方法一 采用非递归方式
这里先定义一个结构体:
struct snode{ node1*node; int parent; };采用层次遍历,设计的对列为非环形顺序队列,将所有的点扫描入队,并记录每个点父节点的位置(方便回溯输出路径)
int longestpath(node1*r){ if(r==NULL)return 0; struct snode{ node1*node; int parent; }qu[20],tmp[20]; int front=-1,rear=-1; int t; bool f=0; node1*p; int i=0; int len=0,maxlen=0; rear++; qu[rear].node=r;qu[rear].parent=-1; while(front<rear){ front++; p=qu[front].node; if(p->left==NULL&&p->right==NULL){len=0;t=front; len++; while(qu[t].parent!=-1){t=qu[t].parent;len++;} //cout<<len<<endl; if(len>maxlen){maxlen=len;t=front;i=0; while(i<maxlen&&qu[t].parent!=-1){tmp[i++]=qu[t];t=qu[t].parent;} tmp[i]=qu[t]; } } if(p->left){rear++;qu[rear].node=p->left;qu[rear].parent=front;} if(p->right){rear++;qu[rear].node=p->right;qu[rear].parent=front;} } cout<<"最长路径:"<<endl; for(i=0;i<maxlen;i++) cout<<tmp[i].node->key<<" "; return maxlen; }输出最长路径 G-D-B-A,最长距离4
方法二 递归方式
递归方式是处理二叉树问题的常用方法,容易想到,但是开销较大。由于需要输出路径,故参数需要引入路径数组以便记录。
void longestpath1(node1*r,char path[],int len,char longpath[],int &longlen){ int i; if(r==NULL){ if(len>longlen){for(i=0;i<len;i++)longpath[i]=path[i];} longlen=len; } else{ path[len]=r->key; len++; longestpath1(r->left,path,len,longpath,longlen); longestpath1(r->right,path,len,longpath,longlen); len--; } }
相关文章推荐
- 二叉树问题---在二叉树中找到累加和为指定值的最长路径长度
- 比酒量问题与二叉树搜索和路径问题
- 网络流24题(06)最长递增子序列问题(最多不相交路径 + 最大流)
- 历届试题 大臣的旅费 (树的最长路径问题:两次BFS)
- nefu495最长k可重区间集问题【最大权不相交路径】网络流24题
- 【剑指offer】4.3举例让抽象问题具体化——面试题25:二叉树中和为某一值的路径
- 由一道面试题“打印二叉树中和为某一值的路径”想到的二叉树的创建问题。
- 算法题15 二叉树的最长的路径长度&amp;&amp;最大路径和
- 变形二叉树中节点的最大距离(树的最长路径)——非递归解法
- 二叉树最长路径
- leetCode 112 二叉树路径求和问题
- 面试题中的二叉树根据和寻路径问题
- 【Leetcode】二叉树简单路径最大和问题
- 【Leetcode】二叉树简单路径最大和问题
- 二叉树中节点的最大距离(树的最长路径)——递归解法
- 二叉树的最长路径
- 线性规划与网络流24题之最长k可重区间集问题 最大权不相交路径(最大费用最大流)
- 二叉树路径和问题
- 旅行商问题(TSP)、最长路径问题与哈密尔顿回路之间的联系(归约)
- 【COGS743】最长k可重区间集问题 最大权不相交路径