二叉树做题:1339:求后序遍历;1340:扩展二叉树;110. 平衡二叉树;108. 将有序数组转换为二叉搜索树bst;109. 有序链表转换二叉搜索树;面试题 04.02. 最小高度树;

这篇博客主要介绍了如何将有序数组转换为二叉搜索树,包括108题和109题的解题思路,强调了平衡二叉树的性质,并探讨了110题平衡二叉树的实现。此外,还分享了扩展二叉树和最小高度树的建树策略,以及使用快慢指针法确定链表中点的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1340:扩展二叉树

#include<bits/stdc++.h>
using namespace std;
struct node{
	char ch;
	node *lchild;
	node *rchild;
};
string s;
int i=-1;
node *build(){
	i++;
	node *rt=new node;
	if(s[i]!='.'){
		rt->ch=s[i];
		rt->lchild=build();
		rt->rchild=build();
	}else return NULL;
	return rt;
} 
void printInorder(node *rt){
	if(rt==NULL) return;
	else{
		printInorder(rt->lchild);
		cout<<rt->ch;
		printInorder(rt->rchild);
	}
}
void printPostOrder(node *rt){
	if(rt==NULL) return;
	else{
		printPostOrder(rt->lchild);
		printPostOrder(rt->rchild);
		cout<<rt->ch;
	}
}
int main(){
	cin>>s;
	node* root=build();
	node *tmp=root;
	printInorder(tmp);
	cout<<endl;
	tmp=root;
	printPostOrder(tmp);
	cout<<endl;
	return 0;
}

1339:求后序遍历

#include<bits/stdc++.h>
using namespace std;
string pre,in; 
void getAns(int l1,int r1,int l2,int r2){
	if(l1>r1||l2>r2) return;
	int t=l2;
	while(pre[l1]!=in[t]) t++;
	getAns(l1+1,r1+t-l2,l2,t-1);//左子树 
	getAns(l1+1+t-l2,r1,t+1,r2);//右子树 
	cout<<pre[l1];
}
int main(){
	cin>>pre>>in;
	getAns(0,pre.size()-1,0,in.size()-1);
	return 0;
}

110. 平衡二叉树

注意:

并不是树根的左右子树高度相差<=1就好了,如图所示。一定是要每一个结点的左右子树高度相差<=1。

代码一:cv题解。

对每个结点进行判断(递归求左右子树的高度,看看它的左右子树高度是否相差在1以内),并对当前节点的左右子节点进行判断(判断左右子节点各自的子树高度差是否在1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值