一、学习要点
1.注意matlab中全局变量与局部变量的区别;本文中assigned_nn为局部变量,每一次递归中的值都是不一样的,node_nubmer为全局变量,当前值的改变如递增,必回影响以后每次递归中该变量的值;结点数据的保存是每次都要递增的,故选择全局变量。每个结点左右子树的值应为局部变量,因为回溯回去该节点的序号不应改变,比如求2号结点的左右子树,而且回溯回去的左右结点序号也不是按程序执行的次数递增。
2.当输入为数据为[-1,-1],意味着该分支数据不存在,即为空数据,该节点不存在,他父节点的对应的子树即为空。
3.该子树的创建为由键盘数据的二维数据先序构建二叉树。
4.matlab利用的是cell中的struct的序号建立整棵树,C语言中一般利用的是指针。
二、程序代码
1.创建二叉树的代码:
函数名:build_btree_parent2.m
function tree_out=build_btree_parent2(parent)
global node_number
global tree_cell
if nargin==0
parent=0;
end
fprintf('请输入数据:');
point(1)=input('请输入x轴坐标:');
point(2)=input('请输入y轴坐标:');
if(isempty(tree_cell))
node_number=1;
assigned_nn=1;
tree_cell(node_number).data=point;
tree_cell(node_number).parent=parent;
elseif(point(1)==point(2)&&point(1)==-1)
tree_out=[];
return;
else
node_number=node_number+1;
assigned_nn=node_number;
tree_cell(node_number).data=point;
tree_cell(node_number).parent=parent;
end
fprintf('请输入[%d,%d]左子树数据\n',point(1),point(2));
tree_cell(assigned_nn).left=build_btree_parent2(assigned_nn);
fprintf('请输入[%d,%d]右子树数据\n',point(1),point(2));
tree_cell(assigned_nn).right=build_btree_parent2(assigned_nn);
tree_out=assigned_nn;
if assigned_nn==1
tree_out=tree_cell;
end
2.调用的主函数:
函数名:main.m
clear all
global tree_cell
tree_cell=[];
tree_out=build_btree_parent2();
三、程序运行结果:
1.键盘输入:
2.程序运行结果: