题目一:从上往下打印二叉树
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
题目解析:这道题实质考查树的遍历算法,遍历通常有前序、中序、后序遍历,此题考查层次遍历。
1、我们需要借助队列,实现按层打印,首先将根节点放入队列中,并将根节点的值放入vector中;
2、判断根节点的左子树是否为空,不为空将该节点放入队列中;
3、判断根节点的右子树是否为空,不为空将该节点放入队列中;
循环读取队列中的节点,并对该节点做左右子树的判断,直至队列中不存在该节点;
二叉树的结构如下所示:
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
本题代码如下所示:
class Solution {
public:
vector<int> PrintFromTopToBottom(TreeNode* root) {
vector<int> printTreeNode;
//借用队列进行层次遍历
queue<TreeNode*> pTree;
if(root == NULL) return printTreeNode;
else
{ pTree.push(root);
while(!pTree.empty())
{
TreeNode * proot = pTree.front();
printTreeNode.push_back(proot->val);
pTree.pop();
if(proot->left != NULL){pTree.push(proot->left);}
if(proot->right !=NULL){pTree.push(proot->right);}
}
}
return printTreeNode;
}
};
详解解析参考:http://www.cnblogs.com/SHERO-Vae/p/5800363.html
题目二:二叉树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
如果A中有一部分子树的结构和B是一样的,因此B是A的子结构
找出B的根节点在A树中的位置,然后采用递归方法进行遍历