aStack.push(element);
sumValue = sumValue + element.pointer->value;
pointer = pointer->nodeLeft;
}
element = aStack.top();
if(element.tag==Right && NULL==element.pointer->nodeLeft&& NULL== element.pointer->nodeRight && item==sumValue)
{
//因为每次考虑Tag的时候考虑了right和left 所以要使不使用element.tag==Right判断条件会打印两遍
//若找到了路径
//输出栈中的元素 然后再把栈重新组织成原来的样子
while(!aStack.empty()){
elementCopy = aStack.top();
aStack.pop();
aCopyStack.push(elementCopy);
}
while(!aCopyStack.empty()){
elementCopy = aCopyStack.top();
aCopyStack.pop();
aStack.push(elementCopy);
cout<
}
cout<
}
aStack.pop();
sumValue = sumValue - element.pointer->value;
pointer = element.pointer;
//从右子树回来
while(element.tag==Right){
if(aStack.empty()) return;
else {
element = aStack.top();
aStack.pop();
pointer = element.pointer;
}
}
//从左子树回来
element.tag = Right;
aStack.push(element);
sumValue = sumValue + element.pointer->value;
pointer = pointer->nodeRight;
}
}
int main()
{
BinaryTree a;
a.addNodeBSTree(1);
a.addNodeBSTree(2);
a.addNodeBSTree(3);
a.addNodeBSTree(4);
a.addNodeBSTree(6);
a.addNodeBSTree(5);
a.addNodeBSTree(7);
NodeBinaryTree * head = a.Root();
//test inorder
a.inOrder(head);
cout<
return 0;
}