632-二叉树遍历

 

/*public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 */
public class Solution {
    /**
     * @param root the root of binary tree
     * @return the max ndoe
     */
    public TreeNode temp;
    public TreeNode maxNode(TreeNode root) {
        temp = root;
        return Max(root);
    }
    
    public TreeNode Max(TreeNode T){
        if(T == null)
            return T;
        if(T.val >= temp.val){
            temp = T;
        }
        Max(T.left);
        Max(T.right);
        return temp;
    }

}

20107.3.17 开始刷第一道题,自己真的很渣,慢慢来吧。

二叉树中求值最大的节点,其实也就是遍历一遍就好,用递归就好

但就是迷迷糊糊的弄不清楚

很受打击

多试试就好了。



                
### 二叉树遍历的C语言实现 以下是基于给定引用内容以及专业知识所提供的二叉树遍历(先序、中序和后序)的C语言实现代码。 #### 节点定义 为了构建二叉树,首先需要定义一个表示节点的数据结构。这里采用指针的方式指向左右子树[^1]: ```c typedef struct TreeNode { int data; struct TreeNode* left; struct TreeNode* right; } TreeNode; ``` #### 创建新节点函数 创建一个新的二叉树节点时,分配内存并初始化其值及其左右子树指针为`NULL`[^2]: ```c TreeNode* createNode(int value) { TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode)); newNode->data = value; newNode->left = NULL; newNode->right = NULL; return newNode; } ``` #### 先序遍历(DLR) 按照访问顺序:根节点 -> 左子树 -> 右子树来实现递归版本的先序遍历[^3]: ```c void preOrderTraversal(TreeNode* root) { if (root != NULL) { printf("%d ", root->data); // 输出当前节点数据 preOrderTraversal(root->left); // 遍历左子树 preOrderTraversal(root->right); // 遍历右子树 } } ``` #### 中序遍历(LDR) 遵循左子树 -> 根节点 -> 右子树的顺序完成递归形式的中序遍历: ```c void inOrderTraversal(TreeNode* root) { if (root != NULL) { inOrderTraversal(root->left); // 遍历左子树 printf("%d ", root->data); // 输出当前节点数据 inOrderTraversal(root->right); // 遍历右子树 } } ``` #### 后序遍历(LRD) 依据左子树 -> 右子树 -> 根节点这一序列执行递归方式下的后序遍历: ```c void postOrderTraversal(TreeNode* root) { if (root != NULL) { postOrderTraversal(root->left); // 遍历左子树 postOrderTraversal(root->right); // 遍历右子树 printf("%d ", root->data); // 输出当前节点数据 } } ``` 以上即为完整的二叉树三种基本遍历方法——先序、中序与后序遍历的C语言实现代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值