Bootstrap

二叉树

二叉树

面试题
选择题:
1)设某二叉树的后序序列为cba,中序序列为abc,则前序序列为什么
CBA
ABC
CAB
BCA
2)一棵二叉树有67个结点,这些结点的度要么是0,要么是2。这棵二叉树中度为2的结点有______________个
33
34
32
30
3)下列关于m阶的B-树的论述不正确的是
B-树是一种平衡的多路查找树
树中每个结点至多有m棵子树
若根结点不是叶子结点,则至少有两棵子树
树中的叶子结点可出现在不同层次上
4)设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1,则T中的叶子数为()
5
6
7
8
6)已知二叉树Node定义如下, 现在需要设计一个方法交换左子树和右子树, 下列方法中, 可以实现交换的是? ()
class Node {
public:
Node* left;
Node* right;
char content;

Node(char content);

private:
Node(const Node&);
Node& operator=(const Node& node);
};

void swap(Node root) {Node* temp=root.left;root.left=root.right;root.right=temp;}
void swap(Node& left, Node& right) {Node temp=left; left=right;right=temp;}
void swap(Node* left, Node* right) {Node* temp=left; left=right;right=temp;}
void swap(Node*& left, Node*& right) {Node* temp=left; left=right;right=temp;}
6)已知一棵有2011个结点的树,其叶结点个数为116,该树对应的二叉树中无右孩子的结点个数是()。
115
116
1895
1896

问答题:
1)前序遍历
递归代码:

public static void preorderTraversalRec(TreeNode root){
   
   if (root == null) {
   
       return;
   }
   System.out.print(root.val + "->");
   preorderTraversalRec(root.left);
   preorderTraversalRec(root.right);
}

非递归代码:

public void preOrder1(BinaryNode<AnyType> Node)
    {
   
        Stack<BinaryNode> stack = new Stack<>();
        while(Node != null || !stack.empty())
        {
   
            while(Node != null)
            {
   
                System.out.print(Node.element + "   ");
                stack.push(Node);
                Node = Node.left;
            }
            if(!stack.empty())
            {
   
                Node = stack.pop();
                Node = Node.right;
            }
        }
    }

1)中序遍历
递归代码:

public static void inorderTraversalRec(TreeNode root){
   
    if (root == null) {
   
        return;
    }
    inorderTraversalRec(root.left);
    System.out.print(root.val + "->");
    inorderTraversalRec(root.right);
}

非递归代码:

public void midOrder1(BinaryNode<AnyType> Node)
    {
   
        Stack<BinaryNode> stack = new Stack<>();
        while(Node != null || !stack.empty())
        {
   
            while (Node != null)
            {
   
                stack.push(Node);
                Node = Node.left;
            }
            if(!stack.empty())
            {
   
                Node = stack.pop();
                System.out.print(Node.element + "   ");
                Node = Node.right;
            }
        }
}

2)后序遍历
递归代码:

public static void postorderTraversalRec(TreeNode root){
   
    if (root == null) {
   
        return;
    }
    postorderTraversalRec(root.left);
    postorderTraversalRec(root.right);
    System.out.print(root.val + "->");
}

非递归代码:

;