private bool ThreadTreeCompare <T>(ThreadBinaryTree <int> expected, ThreadBinaryTree <int> result) { var expectedTreeStack = new Stack <ThreadBinaryTree <int> >(); var resultTreeStack = new Stack <ThreadBinaryTree <int> >(); expectedTreeStack.Push(expected); resultTreeStack.Push(result); while (resultTreeStack.Count > 0 && expectedTreeStack.Count > 0) { var expectedNode = expectedTreeStack.Pop(); var resultNode = resultTreeStack.Pop(); if (resultNode.Data != expectedNode.Data) { return(false); } if (resultNode.LBit != expectedNode.LBit && resultNode.RBit != expectedNode.RBit) { return(false); } if (resultNode.LBit) { resultTreeStack.Push(resultNode.Llink); } if (resultNode.RBit) { resultTreeStack.Push(resultNode.Rlink); } if (expectedNode.LBit) { expectedTreeStack.Push(expectedNode.Llink); } if (expectedNode.RBit) { expectedTreeStack.Push(expectedNode.Rlink); } } return(true); }
public void DeleteNodeFromTree_GivenTwoChildNode() { // arrange var inputFileContent = FileReadHepler.GetFileContent(@"Stub\DeleteNodeFromTree_NodeHasTwoChildNodes_input.json"); var inputTree = JsonConvert.DeserializeObject <BinaryTreeNode <int> >(inputFileContent); var root = ThreadBinaryTree <int> .ConvertToThreadBinTree(inputTree); var deleteNodePar = root; var deleteNode = deleteNodePar.Rlink; var expectedFileContent = FileReadHepler.GetFileContent(@"Excecpation\DeleteNodeFromTree_NodeHasTwoChildNodes.json"); var binaryTreeNode = JsonConvert.DeserializeObject <BinaryTreeNode <int> >(expectedFileContent); var expected = ThreadBinaryTree <int> .ConvertToThreadBinTree(binaryTreeNode); // action var result = ThreadBinaryTree <int> .DeleteNodeFromTree(root, deleteNodePar, deleteNode); // assert Assert.AreEqual(true, ThreadTreeCompare <int>(expected, result)); }