1
나는 C++에서 선매와 무시 자 시퀀스로 이진 트리 (중복 없음)를 만들려고한다. 그것은 아무것도 반환하지함수 밖에서 노드 값이 변경된 이유는 무엇입니까?
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x): val(x),left(NULL),right(NULL) {}
};
int idx = 0; //idx in preorder
void helper(TreeNode* node,int start,int end, vector<int>& preorder, vector<int>& inorder) {
if (start == end) return;
int dummy;
for (dummy = 0; dummy<inorder.size(); dummy++) {
if (inorder[dummy] == node->val) {
break;
}
}
idx ++;
TreeNode left = TreeNode(preorder[idx]);
node->left = &left;
helper(node->left,start,dummy-1,preorder,inorder);
idx ++;
TreeNode right = TreeNode(preorder[idx]);
node->right = &right;
helper(node->right,dummy+1,end,preorder,inorder);
}
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
TreeNode root = TreeNode(preorder[0]);
helper(&root,0,preorder.size()-1,preorder,inorder);
return &root;
}
int main(int argc, const char * argv[]) {
// insert code here..
// build the tree
vector<int> preorder = {2,1,3};
vector<int> inorder = {1, 2, 3};
TreeNode* root = buildTree(preorder,inorder);
return 0;
}
, 나는 그것을 단계적으로 디버깅하려고 할 때, 나는 내가 나왔을 때 왼쪽 자식과 오른쪽 아이의 값이 변경 것을 발견 :
코딩은 다음과 같습니다 기능. 코드를 다시 작성하고 새 TreeNode를 사용하면 작동합니다.
하지만 이전 버전에서는 여전히 혼란 스럽습니다. TreeNode를 생성하는 방식으로 인해 발생합니까?
저는 C++ 포인터에 익숙하지 않으므로 힌트를 얻으실 수 있습니다 !!
'left'와'right'도 마찬가지입니다. –