#include <bits/stdc++.h>
using namespace std;
struct TreeNode{
int data;
TreeNode* left;
TreeNode* right;
TreeNode(int data):left(nullptr),right(nullptr),data(data){};
};
TreeNode* buildTree(vector<int>&arr){
if(arr[0]==-1)return nullptr;
stack<pair<TreeNode*,int>>st;
TreeNode* root = new TreeNode(arr[0]);st.push({root,0});
for(int i = 1;i<arr.size();i++){
auto &top = st.top();
if(arr[i]==-1){
if(top.second == 0){
top.second++;
}else{
st.pop();
}
}else{
TreeNode* newNode = new TreeNode(arr[i]);
if(top.second == 0){
top.first->left = newNode;
top.second++;
}else{
top.first->right = newNode;
st.pop();
}
st.push({newNode,0});
}
}
return root;
}
int size(TreeNode* root){
if(!root)return 0;
return 1+size(root->left)+size(root->right);
}
int sum(TreeNode* root){
if(!root)return 0;
int sm = root->data;
return sm+sum(root->left)+sum(root->right);
}
int height(TreeNode* root){
if(!root)return 0;
return 1+max(height(root->left),height(root->right));
}
int maxDepth(TreeNode* root){
if(!root)return 0;
int dpth = 0;
dpth = max(dpth,maxDepth(root->left));
dpth = max(dpth,maxDepth(root->right));
return dpth+1;
}
int maxi(TreeNode* root){
if(!root)return 0;
int mx = root->data;
return max({mx,maxi(root->right),maxi(root->left)});
}
void displayTree(TreeNode* root){
if(root == nullptr)return;
if(root)cout<<root->data<<"->";
if(root->left)cout<<root->left->data<<",";
if(root->right)cout<<root->right->data<<",";
cout<<endl;
displayTree(root->left);
displayTree(root->right);
}
int main() {
vector<int>arr = {10,30,40,-1,-1,60,-1,-1,50,70,-1,-1,-1};
TreeNode* root = buildTree(arr);
// displayTree(root);
cout<<"szie"<<size(root)<<endl;
cout<<"sum"<<sum(root)<<endl;
cout<<"height"<<height(root)<<endl;
cout<<"maxDepth"<<maxDepth(root)<<endl;
cout<<"maxi"<<maxi(root)<<endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgVHJlZU5vZGV7CglpbnQgZGF0YTsKCVRyZWVOb2RlKiBsZWZ0OwoJVHJlZU5vZGUqIHJpZ2h0OwoJVHJlZU5vZGUoaW50IGRhdGEpOmxlZnQobnVsbHB0cikscmlnaHQobnVsbHB0ciksZGF0YShkYXRhKXt9Owp9OwpUcmVlTm9kZSogYnVpbGRUcmVlKHZlY3RvcjxpbnQ+JmFycil7CglpZihhcnJbMF09PS0xKXJldHVybiBudWxscHRyOwoJc3RhY2s8cGFpcjxUcmVlTm9kZSosaW50Pj5zdDsKCQoJIFRyZWVOb2RlKiByb290ID0gbmV3IFRyZWVOb2RlKGFyclswXSk7c3QucHVzaCh7cm9vdCwwfSk7Cglmb3IoaW50IGkgPSAxO2k8YXJyLnNpemUoKTtpKyspewoJCWF1dG8gJnRvcCA9IHN0LnRvcCgpOwoJCWlmKGFycltpXT09LTEpewoJCQlpZih0b3Auc2Vjb25kID09IDApewoJCQkJdG9wLnNlY29uZCsrOwoJCQl9ZWxzZXsKCQkJCXN0LnBvcCgpOwoJCQl9CgkJfWVsc2V7CgkJCVRyZWVOb2RlKiBuZXdOb2RlID0gbmV3IFRyZWVOb2RlKGFycltpXSk7CgkJCWlmKHRvcC5zZWNvbmQgPT0gMCl7CgkJCQl0b3AuZmlyc3QtPmxlZnQgPSBuZXdOb2RlOwoJCQkgICAgdG9wLnNlY29uZCsrOwoJCQl9ZWxzZXsKCQkJCSB0b3AuZmlyc3QtPnJpZ2h0ID0gbmV3Tm9kZTsKCQkJICAgICBzdC5wb3AoKTsKCQkJCgkJCX0KCQkJCXN0LnB1c2goe25ld05vZGUsMH0pOwoJCX0KCX0KCXJldHVybiByb290OwoJCn0KaW50IHNpemUoVHJlZU5vZGUqIHJvb3QpewoJaWYoIXJvb3QpcmV0dXJuIDA7CnJldHVybiAxK3NpemUocm9vdC0+bGVmdCkrc2l6ZShyb290LT5yaWdodCk7CgkKCn0KaW50IHN1bShUcmVlTm9kZSogcm9vdCl7CmlmKCFyb290KXJldHVybiAwOwppbnQgc20gPSByb290LT5kYXRhOwpyZXR1cm4gc20rc3VtKHJvb3QtPmxlZnQpK3N1bShyb290LT5yaWdodCk7Cn0KaW50IGhlaWdodChUcmVlTm9kZSogcm9vdCl7CmlmKCFyb290KXJldHVybiAwOwoKcmV0dXJuIDErbWF4KGhlaWdodChyb290LT5sZWZ0KSxoZWlnaHQocm9vdC0+cmlnaHQpKTsKfQppbnQgbWF4RGVwdGgoVHJlZU5vZGUqIHJvb3QpewppZighcm9vdClyZXR1cm4gMDsKaW50IGRwdGggPSAwOwpkcHRoID0gbWF4KGRwdGgsbWF4RGVwdGgocm9vdC0+bGVmdCkpOwpkcHRoID0gbWF4KGRwdGgsbWF4RGVwdGgocm9vdC0+cmlnaHQpKTsKcmV0dXJuIGRwdGgrMTsKfQppbnQgbWF4aShUcmVlTm9kZSogcm9vdCl7CglpZighcm9vdClyZXR1cm4gMDsKCWludCBteCA9IHJvb3QtPmRhdGE7CglyZXR1cm4gbWF4KHtteCxtYXhpKHJvb3QtPnJpZ2h0KSxtYXhpKHJvb3QtPmxlZnQpfSk7Cn0Kdm9pZCBkaXNwbGF5VHJlZShUcmVlTm9kZSogcm9vdCl7CglpZihyb290ID09IG51bGxwdHIpcmV0dXJuOwoJaWYocm9vdCljb3V0PDxyb290LT5kYXRhPDwiLT4iOwoJaWYocm9vdC0+bGVmdCljb3V0PDxyb290LT5sZWZ0LT5kYXRhPDwiLCI7CgkJaWYocm9vdC0+cmlnaHQpY291dDw8cm9vdC0+cmlnaHQtPmRhdGE8PCIsIjsKCQljb3V0PDxlbmRsOwoJCWRpc3BsYXlUcmVlKHJvb3QtPmxlZnQpOwoJCWRpc3BsYXlUcmVlKHJvb3QtPnJpZ2h0KTsKfQppbnQgbWFpbigpIHsKCSAgdmVjdG9yPGludD5hcnIgPSB7MTAsMzAsNDAsLTEsLTEsNjAsLTEsLTEsNTAsNzAsLTEsLTEsLTF9OwogICAgICBUcmVlTm9kZSogcm9vdCA9IGJ1aWxkVHJlZShhcnIpOwogICAgIC8vIGRpc3BsYXlUcmVlKHJvb3QpOwogICAgICBjb3V0PDwic3ppZSI8PHNpemUocm9vdCk8PGVuZGw7CiAgICAgICBjb3V0PDwic3VtIjw8c3VtKHJvb3QpPDxlbmRsOwogICAgICAgIGNvdXQ8PCJoZWlnaHQiPDxoZWlnaHQocm9vdCk8PGVuZGw7CiAgICAgICAgY291dDw8Im1heERlcHRoIjw8bWF4RGVwdGgocm9vdCk8PGVuZGw7CiAgICAgICAgICBjb3V0PDwibWF4aSI8PG1heGkocm9vdCk8PGVuZGw7CglyZXR1cm4gMDsKfQ==