打印输出二叉树的第一条最长路径:
我的思路是计算每一个节点的高度,若右儿子的高度比左儿子高,则向右儿子走,否则向左儿子走,下面的几种算法,可以在创建二叉树后加入一个标记height记录结点的高度,比较高度即可,也可以边走边计算高度 。
#include<iostream>
#include<queue>
using namespace std;
typedef struct tree{
int data;
int depth;
struct tree* left;
struct tree* right;
}Tree,*BTree;
int a[100005];
queue<int> q;
int length(BTree root){
BTree p;
p=root;
if(!p) return 0;
else{
int dl=length(p->left);
int dr=length(p->right);
if(dl>dr) {
p->depth=dl+1;
return dl+1;
}
else{
p->depth=dr+1;
return dr+1;
}
}
}
int h(BTree t){
if(t==NULL) return -1;
return max(h(t->left),h(t->right))+1;
}
void longest_path(BTree root){
if(root==NULL) return;
else{
printf("%d",root->data);
if( length(root->left) > length(root->right) ){
if(root->left!=NULL) printf(" "