struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
int High(TreeNode *root)
{
if(root == NULL)
return 0 ;
if(root->left == NULL && root->right == NULL)
return 1;
int size1 = High(root->left);
int size2 = High(root->right);
return (size1>size2 ? size1+1:size2+1);
}
- 銷燬一顆二叉樹–>Destroy(Node* root)
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
void Destroy(TreeNode *root)
{
if(root == NULL)
return ;
if(root->left == NULL && root->right == NULL)
{
delete root;
root = NULL;
return ;
}
if(root->left)
Destroy(root->left);
if(root->right)
Destroy(root->right);
delete root;
root = NULL;
}
- 鏈表每k個節點之間逆置
鏈表翻轉。給出一個鏈表和一個數k,比如鏈表1→2→3→4→5→6,k=2,翻轉後2→1→4→3→6→5,若k=3,翻轉後3→2→1→6→5→4,若k=4,翻轉後4→3→2→1→5→6,
struct Node
{
int value;
struct Node * Next;
Node(int data):value(data),Next(NULL) { }
};
Node * Resign(stack<Node*> &s, Node * left, Node *right)
{
Node *pCur = s.top();
s.pop();
if (left != NULL)
{
left->Next = pCur;
}
while (!s.empty())
{
Node *pNext = s.top();
s.pop();
pCur->Next = pNext;
pCur = pNext;
}
pCur->Next = right;
return pCur;
}
Node* ReverseKNode1(Node * pHead, int k)
{
if (pHead == NULL || k < 2)
{
return NULL;
}
Node *pCur = pHead;
Node * pPre = NULL;
Node * pNext = NULL;
Node * newNode = pHead;
stack<Node*> s;
int num = 0;
while (pCur)
{
pNext = pCur->Next;
s.push(pCur);
num++;
if (num == k)
{
pPre = Resign(s,pPre,pNext);
newNode = newNode == pHead ? pCur : newNode;
num = 0;
}
pCur = pNext;
}
return newNode;
}