标签:val alt src 运算符 节点 操作 图片 return find
用的是老师上课的思路
最后多了针对字符串读完,但是栈还不为空的情况,思路如下:
初始化化存放运算符栈op.push(‘#’) 存放树节点栈 stacktree
while(栈op 不等于 ‘#’){
定义树指针类型 T1,a,b;分别存放根节点,左孩子树,右孩子树
T1初始化分配内存;
b=stacktree 栈头; 出栈
a=stacktree 栈头; 出栈
函数CreateExpTree(T1,a,b,op栈头)
op出栈
T1入栈stacktree
}
函数CreateExpTree是题目给的简单创建树函数
void CreateExpTree(BTree &T,BTree a,BTree b,char ch){ //简单二叉树的创建
T=new BTNode;
T->data=ch;
T->lchild=a;
T->rchild=b;
}
1.创建表达式树
2.计算表达式树
虽然提交一次就正确了,但是这题我做了5个小时
最后的错误点在于判断运算符优先等级的顺序,要先判断相等的情况,再判断大于栈顶元素符的情况, 就是要先把左括号弹出,否则就会错误(其实不大确认,说出来可能不信,调了很久,尝试了很多,试着多了几个判断,但是删除了调试的语句后它突然可以运行了,而且在我看来就是我原来调试之前的代码,实在是不想再和原来的代码再对比了...所以写了暂未完成,等冷静后再看看吧)
1.还原二叉树(按照课本)
2.高度(课本)
全部都是课本上的代码,一次过。
定义全局整型变量 all =0
传参 树 t,高度 h
if t不为空
if t为叶子节点
all += t节点权值 乘 t节点高度h
end if
end if
递归
传参 节点t的左子树,高度h+1
传参 节点t的右子树,高度h+1
这个是考试的时候做的,所以考试结束后就把代码粘过来了,就一次过。
#include<iostream>
using namespace std;
struct tnode{
int value;
tnode*left;
tnode*right;
};
//深度优先遍历 在树中寻找节点node 层次遍历更好
tnode * find(tnode* root, tnode* node){
if(root == NULL || node == NULL) return NULL;
if(root->value == node->value) return root;
tnode* tmp=find(root->left,node);
if(tmp) return tmp;
return find(root->right,node);
}
//判断两个树是否相等
bool same(tnode* node1, tnode* node2){
if(node1==NULL && node2==NULL) return 1;
if(node1==NULL && node2!=NULL) return 0;
if(node1!=NULL && node2==NULL) return 0;
if(node1->value == node2->value)
return same(node1->left,node2->left) && same(node1->right,node2->right);
return 0;
}
int isSubTree(tnode* root1, tnode* root2)
{
if(root1==NULL || root2==NULL) return -1;
//首先遍历root1,找到root2对应的节点
tnode* tmp=find(root1,root2);
if(tmp==NULL) return -1;//root2不在root1中
//接下来判断tmp和root2为根的子树是否相等
//cout<<tmp->value<<" "<<root2->value<<endl;
if(same(tmp,root2)) return 1;
else return -1;
}
其实这个代码十分简单,在看到这个题目就可以有思路,但是我的想法是直接在主树上找到子树的根节点后直接再比较孩子节点,
他是在找到根节点后return 该节点,然后再建一个函数进行比较孩子节点,从读的角度上说十分好理解,也是使用了递归函数的方法,代码量少
但其主函数主要用于测试(没有贴出来),没有考虑到存在相同数值根节点的情况以及一棵树中有相同的子树的情况,如果是我做的话应该会有一个以树未全部遍历为条件的循环查找,
标签:val alt src 运算符 节点 操作 图片 return find
原文地址:https://www.cnblogs.com/Zeng99/p/8993098.html