微软等数据结构与算法面试100题 第四题(二)

2014-11-24 10:52:31 · 作者: · 浏览: 1
tag = Left;
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<value<<" ";
}
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();
sumValue = sumValue - element.pointer->value;
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< a.inOrderStack(9);
return 0;


}