输入一棵二叉树的根结点,求该树的深度,从根结点到叶结点依次经过的结点(含根,叶结点)形成树的一条路径,最长路径的长度为树的深度
#include <iostream>
using namespace std;
struct BinaryTreeNode
{
int data;
struct BinaryTreeNode *lchild;
struct BinaryTreeNode *rchild;
};
typedef struct BinaryTreeNode BinTreeNode;
//先序构造二叉树
BinTreeNode* preOrderCreateTree(BinTreeNode *head)
{
int tmp;
cin >> tmp;
if (tmp == 0)
head = NULL;
else
{
head = new BinTreeNode;
head->data = tmp;
head->lchild = preOrderCreateTree(head->lchild);
head->rchild = preOrderCreateTree(head->rchild);
}
return head;
}
//先序遍历二叉树
void preVisitTree(const BinTreeNode *head)
{
if (head == NULL)
return;
cout << head->data;
preVisitTree(head->lchild);
preVisitTree(head->rchild);
}
void freeTree(BinTreeNode *head)
{
if (head == NULL)
return;
freeTree(head->lchild);
freeTree(head->rchild);
delete head;
}
BinTreeNode* getTreeReverse(BinTreeNode *head)
{
if (head == NULL)
return NULL;
if (head->lchild || head->rchild)
{
BinTreeNode *tmp;
tmp = head->lchild;
head->lchild = head->rchild;
head->rchild = tmp;
}
head->lchild = getTreeReverse(head->lchild);
head->rchild = getTreeReverse(head->rchild);
return head;
}
int main()
{
BinTreeNode *root = NULL;
root = preOrderCreateTree(root);
preVisitTree(root);
cout << endl;
root = getTreeReverse(root);
preVisitTree(root);
cout << endl;
freeTree(root);
return 0;
}