#include <iostream>
#include <stack>
using namespace std;
struct TreeNode{
TreeNode(int v) : val(v), left(nullptr), right(nullptr){
}
int val;
TreeNode *left;
TreeNode *right;
};
int highBinaryTree(TreeNode* root) {
if (nullptr == root)
return 0;
int high = 0;
stack<TreeNode*> mystack;
stack<int> highstack;
mystack.push(root);
highstack.push(1);
while (mystack.size()) {
TreeNode* node = mystack.top();
mystack.pop();
int curhigh = highstack.top();
highstack.pop();
if (nullptr != node->right) {
mystack.push(node->right);
highstack.push(curhigh + 1);
}
if (nullptr != node->left) {
mystack.push(node->left);
highstack.push(curhigh + 1);
}
if (nullptr == node->left && nullptr == node->right) {
if (curhigh > high)
high = curhigh;
}
}
return high;
}
int main() {
//int a;
//cin >> a;
TreeNode *root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->right->left = new TreeNode(5);
root->left->right = new TreeNode(4);
root->left->right->left = new TreeNode(6);
int high = highBinaryTree(root);
cout<< high <<endl;
cout << "Hello World!" << endl;
}