Skip to content

Commit 8a897d4

Browse files
committed
tree
1 parent fdc1242 commit 8a897d4

4 files changed

+101
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* struct TreeNode *left;
6+
* struct TreeNode *right;
7+
* };
8+
*/
9+
struct TreeNode* buildTree(int* inorder, int inorderSize, int* postorder, int postorderSize) {
10+
if (inorderSize <= 0)
11+
{
12+
return NULL;
13+
}
14+
struct TreeNode *newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode));
15+
newNode->val = postorder[postorderSize - 1];
16+
int i;
17+
for (i = 0; i < inorderSize; i++)
18+
{
19+
if (inorder[i] == postorder[postorderSize - 1])
20+
{
21+
break;
22+
}
23+
}
24+
newNode->left = buildTree(inorder, i, postorder, i);
25+
newNode->right = buildTree(inorder + i + 1, inorderSize - i - 1, postorder + i, inorderSize - i - 1);
26+
return newNode;
27+
}

144-Binary-Tree-Preorder-Traversal.c

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* struct TreeNode *left;
6+
* struct TreeNode *right;
7+
* };
8+
*/
9+
/**
10+
* Return an array of size *returnSize.
11+
* Note: The returned array must be malloced, assume caller calls free().
12+
*/
13+
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
14+
int *result = (int*)malloc(100000 * sizeof(int));
15+
struct TreeNode* stack[100000];
16+
int top = -1;
17+
*returnSize = 0;
18+
while (NULL != root || -1 != top)
19+
{
20+
while (NULL != root)
21+
{
22+
stack[++top] = root;
23+
result[(*returnSize)++] = root->val;
24+
root = root->left;
25+
}
26+
root = stack[top--]->right;
27+
}
28+
return result;
29+
}

226-Invert-Binary-Tree.c

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* struct TreeNode *left;
6+
* struct TreeNode *right;
7+
* };
8+
*/
9+
struct TreeNode* invertTree(struct TreeNode* root) {
10+
if (NULL == root)
11+
{
12+
return NULL;
13+
}
14+
struct TreeNode *temp = invertTree(root->left);
15+
root->left = invertTree(root->right);
16+
root->right = temp;
17+
return root;
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* struct TreeNode *left;
6+
* struct TreeNode *right;
7+
* };
8+
*/
9+
struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) {
10+
struct TreeNode *tempNode;
11+
while (NULL != root)
12+
{
13+
if (p->val < root->val && q->val < root->val)
14+
{
15+
root = root->left;
16+
}
17+
else if (p->val > root->val && q->val > root->val)
18+
{
19+
root = root->right;
20+
}
21+
else
22+
{
23+
return root;
24+
}
25+
}
26+
return root;
27+
}

0 commit comments

Comments
 (0)