研发埠

标题: [Microsoft面试]题目:输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点。 [打印本页]

作者: 陈荣莲    时间: 2013-8-16 10:57
标题: [Microsoft面试]题目:输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点。
用递归和循环两种方法完成树的镜像转换。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入:8/ \6 10/\ /\5 7 9 11输出:8/ \10 6/\ /\11 9 7 5定义二元查找树的结点为:struct BSTreeNode // a node in the binary search tree (BST){int m_nValue; // value of nodeBSTreeNode *m_pLeft; // left child of nodeBSTreeNode *m_pRight; // right child of node};
作者: 秦静静    时间: 2013-8-16 11:10
This isthe basic application of recursion.PS: I don’t like the m_xx naming convension.void swap(Node ** l, Node ** r) {  Node * p = *l;  *l = *r;  *r = p;}voidmirror(Node * root) {  if (root == NULL) return;  swap(&(root->left), &(root->right));  mirror(root->left);  mirror(root->right);}voidmirrorIteratively(Node * root) {  if (root == NULL) return;  stack<Node*> buf;  buf.push(root);  while (!stack.empty()) {    Node * n = stack.pop();    swap(&(root->left), &(root->right));    if (root->left != NULL) buf.push(root->left);    if (root->right != NULL) buf.push(root->right);  }}




欢迎光临 研发埠 (http://bbs.yanfabu.com/) Powered by Discuz! X3.2