#include #include #include #include using namespace std;
struct treenode
;bool insert(treenode *&root,int val)//插入值
if (root->data == val) return false;
if (root->data < val)
insert(root->rson, val);
else insert(root->lson, val);
}void preorder(treenode *root)
}void display1(treenode *root)//非遞迴前序遍歷
if (!s.empty())
}}void inorder(treenode *root)
}void display2(treenode *root)//非遞迴中序遍歷
if (!s.empty())
}}void postorder(treenode *root)
}void display3(treenode *root)
if (!s.empty())
else
} }}
void display4(treenode* root)//廣度優先
}void display41(treenode *root)//按行列印
if (p->rson != null)
if (cost == 0)
}}bool hassubtree1(treenode *root1, treenode *root2)
bool hassubtree(treenode *root1, treenode *root2)//兩棵二叉樹a和b,判斷b是不是a的子結構
if (!result)
result = hassubtree(root1->lson,root2);
if (!result)
result = hassubtree(root1->rson, root2);
}return result;
}//二叉樹映象
void mirror(treenode *root)
//判斷是否對稱二叉樹
bool issymmetrical(treenode *root1, treenode *root2)
//二叉樹轉換為雙向鍊錶
void convertnode(treenode *root, treenode *&lastnode)
treenode* treetolist(treenode *root)
bool issymmetrical(treenode *root)
void findpath(treenode *root, int expectvalue, vector&path, int currentsum)
if (root->lson != null)
findpath(root->lson, expectvalue, path, currentsum);
if (root->rson != null)
findpath(root->rson, expectvalue, path, currentsum);
path.pop_back();
}void findpath(treenode *root, int expectvalue)//二叉樹中和為某個值的路徑
//二叉樹的深度
int treedeep(treenode *root)
//判斷是否為平衡樹
bool isbalanced(treenode *root, int &deep)
int left, right;
if (isbalanced(root->lson, left) && isbalanced(root->rson, right)) }
return false;
}bool isbalanced(treenode *root)//入口
//找到二叉搜尋樹第k個結點(find 和found兩個方法)
treenode* find(treenode *root, int &k)
if (target == null && root->rson != null)
target = find(root->rson, k);
return target;
}treenode *found(treenode *root, int &k)
if(ans==null)
ans=found(root->rson, k);
}return ans;
}void main()
system("pause");
}
常見的二叉樹面試題
面試中,最常見是資料結構就是二叉樹和鍊錶了,其中和二叉樹有關的常見面試題主要是 樹的前序遍歷 中序遍歷 後序遍歷 分層遍歷 樹的節點數 樹的葉子節點數 樹的第k層節點數 樹的深度 樹的寬度 平衡二叉樹的判定 完全二叉樹的判定 滿二叉樹的判定 由前序中序反推後序遍歷 由前序中序重建二叉樹,處理這些問題...
二叉樹面試題
1.求二叉樹節點個數 可以使用遞迴解決。將問題分解為求根節點 左子樹的節點數 右節點的節點數。實現 public size t size private size t size node root 2.求頁節點個數 頁節點 左右子樹都為空的節點被稱為頁節點,使用遞迴遍歷,當碰到乙個左右子樹為空的節點...
面試題 二叉樹
面試題 二叉樹 1.重建二叉樹 前序 中序 treenode reconstructbinarytree vector pre,vector vin treenode root new treenode pre 0 int pos 0 for pos pre left,vin left,pre ri...