力扣上的一個題目(給你一個樹,請你 按中序遍歷 重新排列樹,使樹中最左邊的結點現在是樹的根,并且每個結點沒有左子結點,只有一個右子結點。),
我先用前序遍歷得到節點數,然后用中序遍歷把節點值存入陣列,然后從陣列轉化成目標樹。
默認的例子可以通過,提交的時候碰到了只有一個節點的輸入就出錯了,輸出了十個節點,前九個是-1094795586,最后一個才是要的值,我在VS上跑了一遍是對的。希望大佬們幫忙看看是哪里出了問題。
代碼如下:
int temp = 0,count = 0;
/*二叉樹前序遍歷*/
void PreOrderTraverse(TreeNode* T) {
if (T == NULL)
return;
count++;
PreOrderTraverse(T->left);
PreOrderTraverse(T->right);
}
/*二叉樹中序遍歷*/
Status InOrderTraverse(TreeNode *T,int *nums) {
if (T == NULL)
return FALSE;
InOrderTraverse(T->left,nums);
nums[temp++] = T->val;
InOrderTraverse(T->right,nums);
return TRUE;
}
struct TreeNode* increasingBST(struct TreeNode* root) {
PreOrderTraverse(root);
int *nums = (int *)malloc(sizeof(int)*count);
InOrderTraverse(root, nums);
TreeNode *T = (TreeNode *)malloc(sizeof(TreeNode));
TreeNode *temp = T;
for (int i = 0; i < count; i++) {
TreeNode *p = (TreeNode *)malloc(sizeof(TreeNode));
p->val = nums[i];
p->left = p->right = NULL;
temp->right = p;
temp = temp->right;
}
return T->right;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/17634.html
標籤:C語言
上一篇:Linux下交叉編譯QT 出錯
