
struct TreeNode{int val;struct TreeNode *left;struct TreeNode *right;};
#ifndef BINARY_TREE_DEEP_H#define BINARY_TREE_DEEP_H#include "reconstructBinaryTree.h"#include<stack>#include<set>void treeDeepCore(TreeNode *node ,std::stack<TreeNode*> &v_stack,std::set<int> &v_set);int getBinaryTreeDeep(TreeNode **root){if(root==NULL||*root==NULL){return 0;}std::stack<TreeNode*> g_stack;std::set<int> g_set;treeDeepCore(*root,g_stack,g_set);std::cout<<*(g_set.begin())<<std::endl;return *(g_set.rbegin());}void treeDeepCore(TreeNode *node ,std::stack<TreeNode*> &v_stack,std::set<int> &v_set){if(node==NULL){return;}v_stack.push(node);if(node->left==NULL&&node->right==NULL){v_set.insert(v_stack.size());}treeDeepCore(node->left,v_stack,v_set);treeDeepCore(node->right,v_stack,v_set);if(!v_stack.empty()){v_stack.pop();}}#endif
#include"binaryTreeDeep.h"int main(){int pre[8]={1,2,4,7,3,5,6,8};int mid[8]={4,7,2,1,5,3,8,6};struct TreeNode *root=reconstructBinaryTree(pre,mid,8); //重建二叉树std::cout<<getBinaryTreeDeep(&root);}


int binaryTreeDeepCore(TreeNode *node){if(node==NULL){return 0;}int leftDeep=binaryTreeDeepCore(node->left);int rightDeep=binaryTreeDeepCore(node->right);return (leftDeep>rightDeep)? (leftDeep+1):(rightDeep+1);}
#ifndef IS_BALANCETREE_H#define IS_BALANCETREE_H#include"reconstructBinaryTree.h"int binaryTreeDeepCore(TreeNode *node);bool isBalanceBT(TreeNode *root){if(root==NULL){return true;}int leftDeep=binaryTreeDeepCore(root->left);int rightDeep=binaryTreeDeepCore(root->right);int diffDeep=leftDeep-rightDeep;if(diffDeep>1||diffDeep<-1)return false;return binaryTreeDeepCore(root->left)&&binaryTreeDeepCore(root->right);}int binaryTreeDeepCore(TreeNode *node){if(node==NULL){return 0;}int leftDeep=binaryTreeDeepCore(node->left);int rightDeep=binaryTreeDeepCore(node->right);return (leftDeep>rightDeep)? (leftDeep+1):(rightDeep+1);}#endif
原文:http://www.cnblogs.com/yml435/p/4655471.html