#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<sstream>
using namespace std;
#define L 101
typedef struct node;
typedef node *tree; //tree => &node;tree本身就代表地址了
struct node{
char data;
tree left=NULL,right=NULL; //默认设为NULL => 方便到底停止
int len=1;
};
tree root;
string s1="ABCDEFG";
string s2="CBDAFEG";
int build(int l1,int h1,int l2,int h2,tree root){ //递归目的 => 返回当前len
//递归 => 顺序建树 + 逆序设值
int m = s2.find(s1[l1]);
root->data = s1[l1]; //data赶快设置 => m为全局会修改
int llen=0,rlen=0;
//存在左子树
bool flag = false;
if(m>l2){
flag = true;
tree bt = new node; //将bt变为局部变量 + new堆 = 不干扰 + 不销毁
root->left = bt;
llen = build(l1+1,l1+m-l2,l2,m-1,bt);
}
if(m<h2){
flag = true;
tree bt2 = new node; //将bt变为局部变量 + new堆 = 不干扰 + 不销毁
root->right = bt2;
rlen = build(l1+m-l2+1,h1,m+1,h2,bt2);
}
root->len = llen + rlen;
if(!flag) root->len++; //叶节点为1
return root->len;
}
void view(tree bt){
if(bt){
for(int i=1;i<=bt->len;i++){
cout << bt->data;
}
cout << endl;
view(bt->left);
view(bt->right);
}
}
int main()
{
//1.建树
root = new node;
build(0,s1.length()-1,0,s2.length()-1,root);
//2.遍历
view(root);
return 0;
}
//cout << "输入:"
练习4 - 二叉树输出
最新推荐文章于 2022-04-24 15:14:17 发布